Bildu urllib3 proxy eskaera paraleloen emaitza bakoitza
Partekatu konfiguratutako ProxyManager langile-harien artean, kontsumitu exekutzailearen emaitza-iteratzailea eta bereizi igerilekuaren atxikipena konexio-mugatik.
Langile-igerileku bat sortzeak ez dio deitzaileari deskargatutako orrialderik ematen. Gorde eta kontsumitu bidalitako lanak itzultzen dituen balioak:
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()Zati honek URL zerrenda mugatu bat eta erantzun-tamaina arruntak suposatzen ditu. Proxy autentifikaziorik gabeko URL publikoen egiaztapen baimenduetarako, HTTP proxy zerrendako hautagai batek kudeatzailearen adibideko HTTP amaiera-puntua ordezkatu dezake. Emaitza bakoitzak bere URLa dakar, deitzaileak egoera eta gorputza eskaera zuzenarekin lotu ahal izan ditzan. map-ek sarrerako ordenan itzultzen ditu emaitzak; langile bateko salbuespena emaitza hori eskuratzean sortzen da.
Konfiguratutako ProxyManager-ek eskaeren konexio-igerilekua du. Hemen erabiltzen den aurrez kargatutako erantzun modu lehenetsiarekin, urllib3-k gorputza irakurtzen du eta konexioa bere igerilekura itzultzen du. Streaming bertsio batek kontsumo esplizitua eta konexioaren askapena beharko lituzke.
maxsize-k normalean mantendutako berrerabilgarri diren konexioak kontrolatzen ditu, ez irekitako socket bakoitzerako muga gogorra. block=True-k igerilekuaren jokabide esanguratsua aldatzen du, deitzaileek konexio libre baten zain egon daitezen igerileku horren mugatik haratago gehigarririk ireki beharrean.
Langile-kopuruak dei paraleloak mugatzen ditu adibide honetan. Helmuga asko daudenean, igerilekuaren antolaketa eta HTTPS tunneletarako erabiltzen den ibilbidea ere garrantzitsuak dira; igerileku bakarreko ezarpena ez litzateke deskribatu behar ostalari bakoitzerako socket kuota global bakarra balitz bezala.