Jiddwer Resultat aus gläichzäitegen urllib3-Proxy-Ufroen sammelen
Deelt en konfiguréierte ProxyManager tëscht Aarbechtsfiedem, verbraucht den Iterateur vun de Resultater vum Executeur an ënnerscheet d'Behalen am Pool vun enger Verbindungslimite.
En Aarbechterpool ze schafen gëtt dem Opruffer net déi erofgeluede Säiten. Behaalt a verbraucht d'Wäerter, déi déi agereecht Aarbecht zréckgëtt:
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()Dësen Ausschnëtt setzt eng begrenzt Lëscht vun URLen an üblech Äntwertgréissten viraus. Fir erlaabt ëffentlech URL-Préiwen ouni Proxy-Authentifikatioun kann en Kandidat aus der HTTP-Proxy-Lëscht den HTTP-Beispill-Endpunkt vum Manager ersetzen. Jiddwer Resultat enthält seng URL, sou datt den Opruffer de Status an de Kierper mat der richtege Ufro verknëppe kann. map gëtt d'Resultater an der Input-Uerdnung zréck; eng Ausnam an engem Aarbechter gëtt erausgehuewen, wann dat Resultat ofgeruff gëtt.
De konfiguréierte ProxyManager besëtzt de Verbindungspool fir d'Ufroen. Mat dem hei benotzten Standardmodus fir virgeluede Äntwerten liest urllib3 de Kierper a gëtt d'Verbindung an säi Pool zréck. Eng Streaming-Versioun géif en explizitte Verbrauch an d'Fräisetze vun der Verbindung erfuerderen.
maxsize kontrolléiert normalerweis déi behalen erëmbenotzbar Verbindungen, net eng haart Obergrenz fir all opgemaachte Socket. block=True ännert dat relevant Poolverhalen, sou datt d'Opruffer op eng fräi Verbindung waarden, amplaz zousätzlech iwwer d'Limite vun deem Pool opzemaachen.
D'Zuel vun den Aarbechter begrenzt an dësem Beispill déi gläichzäiteg Opruff. Bei villen Destinatiounen zielen och de Pool-Layout an de Wee fir HTTPS-Tunnelen; eng Astellung pro Pool soll net als eng eenzeg global Socket-Kvota fir all Host beschriwwe ginn.