Mblidhni çdo rezultat nga kërkesat e njëkohshme të përfaqësuesit urllib3
Ndani një ProxyManager të konfiguruar midis fijeve të punës, konsumoni përsëritësin e rezultateve të ekzekutuesit dhe dalloni mbajtjen në pishinë nga një kufi lidhjesh.
Krijimi i një pishine punëtorësh nuk i jep thirrësit faqet e shkarkuara. Ruani dhe konsumoni vlerat që kthen puna e dorëzuar:
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()Ky fragment supozon një listë të kufizuar URL-ash dhe madhësi të zakonshme përgjigjesh. Për kontrolle të lejuara të URL-ve publike pa vërtetim përfaqësuesi, një kandidat nga lista e përfaqësuesve HTTP mund të zëvendësojë pikën përfundimtare HTTP shembull të menaxherit. Çdo rezultat përfshin URL-në e tij, kështu që thirrësi mund ta lidhë statusin dhe trupin me kërkesën e saktë. map kthen rezultatet sipas rendit të hyrjes; një përjashtim në një punëtor ngrihet kur merret ai rezultat.
ProxyManager i konfiguruar zotëron grumbullimin e lidhjeve për kërkesat. Me modalitetin e parazgjedhur të përgjigjes së parangarkuar që përdoret këtu, urllib3 lexon trupin dhe e kthen lidhjen në pishinën e tij. Një version transmetimi do të kërkonte konsum eksplicit dhe lirim të lidhjes.
maxsize normalisht kontrollon lidhjet e ripërdorshme të mbajtura, jo një kufi të fortë për çdo socket të hapur. block=True ndryshon sjelljen përkatëse të pishinës, kështu që thirrësit presin një lidhje të lirë në vend që të hapin të tjera shtesë përtej kufirit të asaj pishine.
Numri i punëtorëve kufizon thirrjet e njëkohshme në këtë shembull. Me shumë destinacione, kanë rëndësi edhe plani i pishinës dhe rruga e përdorur për tunelet HTTPS; një cilësim për pishinë nuk duhet të përshkruhet si një kuotë globale socketsh për çdo host.