ਸਮਕਾਲੀ urllib3 ਪ੍ਰੌਕਸੀ ਬੇਨਤੀਆਂ ਤੋਂ ਹਰ ਨਤੀਜਾ ਇਕੱਠਾ ਕਰੋ
ਵਰਕਰ ਥ੍ਰੈਡਾਂ ਵਿਚਕਾਰ ਸੰਰਚਿਤ ProxyManager ਸਾਂਝਾ ਕਰੋ, ਐਗਜ਼ਿਕਿਊਟਰ ਦਾ ਨਤੀਜਾ ਇਟਰੇਟਰ ਵਰਤੋ ਅਤੇ ਪੂਲ ਧਾਰਨ ਨੂੰ ਕਨੈਕਸ਼ਨ ਸੀਮਾ ਤੋਂ ਵੱਖ ਕਰੋ।
ਵਰਕਰ ਪੂਲ ਬਣਾਉਣ ਨਾਲ ਕਾਲਰ ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤੇ ਪੰਨੇ ਨਹੀਂ ਮਿਲਦੇ। ਸਪੁਰਦ ਕੀਤੇ ਕੰਮ ਵੱਲੋਂ ਵਾਪਸ ਕੀਤੇ ਮੁੱਲ ਰੱਖੋ ਅਤੇ ਵਰਤੋ:
from concurrent.futures import ThreadPoolExecutor
import urllib3
manager = urllib3.ProxyManager(
'http://proxy.example:8080',
maxsize=4,
block=True,
)
def fetch(url):
response = manager.request(
'GET', url, timeout=urllib3.Timeout(connect=5, read=15),
)
return url, response.status, response.data
try:
with ThreadPoolExecutor(max_workers=4) as workers:
results = list(workers.map(fetch, urls))
finally:
manager.clear()ਇਹ ਟੁਕੜਾ ਸੀਮਿਤ URL ਸੂਚੀ ਅਤੇ ਆਮ ਜਵਾਬ ਆਕਾਰ ਮੰਨਦਾ ਹੈ। ਪ੍ਰੌਕਸੀ ਪ੍ਰਮਾਣਿਕਤਾ ਤੋਂ ਬਿਨਾਂ ਮਨਜ਼ੂਰ ਜਨਤਕ-URL ਜਾਂਚਾਂ ਲਈ HTTP ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਤੋਂ ਇੱਕ ਉਮੀਦਵਾਰ ਪ੍ਰਬੰਧਕ ਦੇ ਉਦਾਹਰਨ HTTP ਐਂਡਪੁਆਇੰਟ ਨੂੰ ਬਦਲ ਸਕਦਾ ਹੈ। ਹਰ ਨਤੀਜੇ ਵਿੱਚ ਇਸਦਾ URL ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ ਤਾਂ ਜੋ ਕਾਲਰ ਸਥਿਤੀ ਅਤੇ ਬਾਡੀ ਨੂੰ ਸਹੀ ਬੇਨਤੀ ਨਾਲ ਜੋੜ ਸਕੇ। map ਇਨਪੁਟ ਕ੍ਰਮ ਵਿੱਚ ਨਤੀਜੇ ਵਾਪਸ ਕਰਦਾ ਹੈ; ਵਰਕਰ ਵਿੱਚ ਅਪਵਾਦ ਉਸ ਨਤੀਜੇ ਨੂੰ ਲੈਣ ਸਮੇਂ ਉਠਾਇਆ ਜਾਂਦਾ ਹੈ।
ਸੰਰਚਿਤ ProxyManager ਬੇਨਤੀਆਂ ਲਈ ਕਨੈਕਸ਼ਨ ਪੂਲਿੰਗ ਦਾ ਮਾਲਕ ਹੈ। ਇੱਥੇ ਵਰਤੇ ਗਏ ਡਿਫਾਲਟ ਪ੍ਰੀਲੋਡਿਡ ਜਵਾਬ ਮੋਡ ਨਾਲ, urllib3 ਬਾਡੀ ਪੜ੍ਹਦਾ ਹੈ ਅਤੇ ਕਨੈਕਸ਼ਨ ਨੂੰ ਆਪਣੇ ਪੂਲ ਵਿੱਚ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਸਟ੍ਰੀਮਿੰਗ ਸੰਸਕਰਣ ਲਈ ਸਪਸ਼ਟ ਵਰਤੋਂ ਅਤੇ ਕਨੈਕਸ਼ਨ ਛੱਡਣ ਦੀ ਲੋੜ ਹੋਵੇਗੀ।
maxsize ਆਮ ਤੌਰ ਤੇ ਰੱਖੇ ਗਏ ਦੁਬਾਰਾ ਵਰਤੋਂਯੋਗ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਦਾ ਹੈ, ਹਰ ਖੋਲ੍ਹੇ ਗਏ ਸਾਕਟ ਤੇ ਸਖ਼ਤ ਸੀਮਾ ਨਹੀਂ। block=True ਸੰਬੰਧਿਤ ਪੂਲ ਵਿਵਹਾਰ ਬਦਲਦਾ ਹੈ ਤਾਂ ਜੋ ਕਾਲਰ ਉਸ ਪੂਲ ਦੀ ਸੀਮਾ ਤੋਂ ਵੱਧ ਵਾਧੂ ਖੋਲ੍ਹਣ ਦੀ ਬਜਾਏ ਖਾਲੀ ਕਨੈਕਸ਼ਨ ਦੀ ਉਡੀਕ ਕਰਨ।
ਇਸ ਉਦਾਹਰਨ ਵਿੱਚ ਵਰਕਰ ਗਿਣਤੀ ਸਮਕਾਲੀ ਕਾਲਾਂ ਨੂੰ ਸੀਮਿਤ ਕਰਦੀ ਹੈ। ਬਹੁਤ ਸਾਰੇ ਮੰਜ਼ਿਲਾਂ ਨਾਲ, ਪੂਲ ਲੇਆਉਟ ਅਤੇ HTTPS ਸੁਰੰਗਾਂ ਲਈ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਰਸਤਾ ਵੀ ਮਹੱਤਵਪੂਰਨ ਹੈ; ਇੱਕ ਪੂਲ ਦੀ ਸੈਟਿੰਗ ਨੂੰ ਹਰ ਹੋਸਟ ਲਈ ਇੱਕ ਵਿਸ਼ਵਵਿਆਪੀ ਸਾਕਟ ਕੋਟਾ ਵਜੋਂ ਨਹੀਂ ਦੱਸਿਆ ਜਾਣਾ ਚਾਹੀਦਾ।