Li toħloq pool ta' ħaddiema ma jagħtix lill-sejjaħ il-paġni mniżżla. Żomm u kkonsma l-valuri li jirritorna x-xogħol sottomess:

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()

Dan il-framment jassumi lista limitata ta' URL u daqsijiet ta' risposta ordinarji. Għal verifiki ta' URL pubbliċi permessi mingħajr awtentikazzjoni tal-proxy, kandidat mill-lista tal-proxy HTTP jista' jissostitwixxi l-endpoint HTTP eżempju tal-maniġer. Kull riżultat jinkludi l-URL tiegħu sabiex is-sejjaħ jista' jassoċja l-istat u l-korp mat-talba t-tajba. map jirritorna r-riżultati fl-ordni tal-input; eċċezzjoni f'ħaddiem titqajjem meta dak ir-riżultat jiġi mistqarr.

Il-ProxyManager konfigurat għandu l-pooling tal-konnessjonijiet għat-talbiet. Bil-mod ta' risposta preload bil-prestazzjoni użat hawn, urllib3 jaqra l-korp u jirritorna l-konnessjoni lejn il-pool tiegħu. Verżjoni streaming tkun teħtieġ konsum espliċitu u ħelsien tal-konnessjoni.

maxsize normalment jikkontrolla l-konnessjonijiet riużabbli miżmuma, mhux limitu iebes fuq kull socket miftuħa. block=True jbiddel l-imġiba rilevanti tal-pool sabiex is-sejjħa jistennew konnessjoni ħielsa minflok ma jiftħu oħrajn addizzjonali lil hinn mil-limitu ta' dak il-pool.

L-għadd ta' ħaddiema jillimita s-sejħiet konkorrenti f'dan l-eżempju. B'ħafna destinazzjonijiet, it-tqassim tal-pool u r-rotta użata għall-mini HTTPS huma wkoll importanti; konfigurazzjoni għal pool wieħed m'għandhiex tiġi deskritta bħala kwota globali waħda ta' sockets għal kull host.

Artikli relatati