Koguda iga tulemus samaaegsetest urllib3 puhverserveri päringutest
Jagage konfigureeritud ProxyManager töölõimede vahel, tarbige täitja tulemuste iteraatorit ja eristage basseini säilitamist ühenduse piirangust.
Töötajate basseini loomine ei anna kutsujale alla laaditud lehti. Hoidke ja tarbige esitatud töö tagastatud väärtusi:
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()See fragment eeldab piiratud URL-ide loendit ja tavalisi vastuse suurusi. Lubatud avalike URL-ide kontrollideks ilma puhverserveri autentimiseta võib HTTP puhverserverite loendist pärit kandidaat asendada halduri näidis-HTTP-lõpp-punkti. Iga tulemus sisaldab oma URL-i, et kutsuja saaks seostada oleku ja keha õige päringuga. map tagastab tulemused sisestusjärjekorras; töötajas tekkinud erind tõstetakse, kui see tulemus kätte saadakse.
Konfigureeritud ProxyManager omab päringute ühenduste basseini. Siin kasutatava vaikimisi eellaaditud vastuse režiimiga loeb urllib3 keha ja tagastab ühenduse oma basseini. Voogedastusversioon vajaks selget tarbimist ja ühenduse vabastamist.
maxsize juhib tavaliselt säilitatavaid korduskasutatavaid ühendusi, mitte kõva ülempiiri igale avatud soklile. block=True muudab asjakohast basseini käitumist, nii et kutsujad ootavad vaba ühendust, selle asemel et avada täiendavaid üle selle basseini piiri.
Töötajate arv piirab selles näites samaaegseid kõnesid. Paljude sihtkohtade korral on oluline ka basseini paigutus ja HTTPS-tunnelite marsruut; ühe basseini seadet ei tohiks kirjeldada ühe globaalse sokli kvoodina iga hosti jaoks.