Elk resultaat fan tagelyk urllib3-proxyfersiken sammelje
Diel in konfigurearre ProxyManager tusken wurkdraden, ferbrûk de resultaat-iteraasje fan de útfiere en ûnderskied it behâld fan de poel fan in ferbiningslimyt.
It meitsjen fan in wurkpoel jout de oanropper de downloadde siden net. Bewarje en ferbrûk de wearden dy't it ynstjoerde wurk weromjout:
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()Dit fragmint ferûnderstelt in beheinde list URL's en gewoane antwurdgrutten. Foar tastiene iepenbiere URL-kontrôles sûnder proxy-ferifikaasje kin in kandidaat út 'e HTTP-proxylist it foarbyld-HTTP-einpunt fan 'e behearder ferfange. Elk resultaat befettet syn URL, sadat de oanropper status en lichem oan it juste fersyk keppelje kin. map jout resultaten yn ynfierfolchoarder werom; in útsûndering yn in wurker wurdt opheft as dat resultaat ophelle wurdt.
De konfigurearre ProxyManager besit de ferbiningspoel foar de fersiken. Mei de hjir brûkte standert foarladen antwurdmodus lêst urllib3 it lichem en jout de ferbining werom oan syn poel. In streamingferzje soe eksplisite konsumpsje en frijlitting fan 'e ferbining nedich hawwe.
maxsize regelet normaal bewarre werbrûkbere ferbiningen, net in hurde limyt op elke iepene socket. block=True feroaret it relevante poelgedrach, sadat oanroppers op in frije ferbining wachtsje ynstee fan ekstra te iepenjen boppe de limyt fan dy poel.
It oantal wurkers beheint tagelyk oproppen yn dit foarbyld. By in protte bestimmingen binne poelyndieling en de rûte foar HTTPS-tunnels ek fan belang; in ynstelling per poel moat net beskreaun wurde as ien globale sockettota foar elke host.