Safnaðu hverri niðurstöðu úr samhliða urllib3 proxy beiðnum
Deildu stilltum ProxyManager milli vinnuþráða, notaðu niðurstöðu-iterator framkvæmdarans og greindu varðveislu laugar frá tengitakmörkum.
Að búa til vinnulaug gefur kallaranum ekki niðurhluðu síðurnar. Geymdu og notaðu gildin sem innsent verk skilar:
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()Þetta brot gerir ráð fyrir takmörkuðum URL-lista og venjulegum svarstærðum. Fyrir leyfðar opinberar URL-prófanir án proxy-auðkenningar getur frambjóðandi af HTTP proxy listanum komið í stað dæmi-HTTP-endapunkts stjórnandans. Hver niðurstaða inniheldur URL sitt svo kallarinn geti tengt stöðu og meginmál við rétta beiðni. map skilar niðurstöðum í röð inntaks; undantekning í vinnuþræði er kastað þegar sú niðurstaða er sótt.
Stillti ProxyManager á tengilaugina fyrir beiðnirnar. Með sjálfgefna forhlaðna svarhamanum sem notaður er hér les urllib3 meginmálið og skilar tengingunni í laug sína. Streymisútgáfa þyrfti skýra notkun og losun tengingar.
maxsize stýrir venjulega varðveittum endurnýtanlegum tengingum, ekki harðri hámarks takmörkun á hverjum opnum socket. block=True breytir viðkomandi hegðun laugarinnar þannig að kallarar bíða eftir lausri tengingu í stað þess að opna fleiri umfram takmörk þeirrar laugar.
Fjöldi vinnuþráða takmarkar samhliða köll í þessu dæmi. Með mörgum áfangastöðum skipta útlit laugarinnar og leiðin sem notuð er fyrir HTTPS-göng einnig máli; stilling fyrir eina laug ætti ekki að vera lýst sem einu alheims socket-kvóta fyrir hvern hýsil.