Kuunda dimbwi la wafanyakazi hakumpi mwita kurasa zilizopakuliwa. Hifadhi na utumie thamani zinazorudishwa na kazi iliyowasilishwa:

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

Kipande hiki kinadhani orodha yenye mipaka ya URL na ukubwa wa kawaida wa majibu. Kwa ukaguzi wa URL za umma unaoruhusiwa bila uthibitishaji wa wakala, mwombaji kutoka orodha ya wakala wa HTTP anaweza kuchukua nafasi ya kituo cha mwisho cha HTTP cha mfano cha msimamizi. Kila tokeo linajumuisha URL yake ili mwita aweze kuhusisha hali na mwili na ombi sahihi. map hurudisha matokeo kwa mpangilio wa ingizo; ubaguzi katika mfanyakazi huinuliwa wakati tokeo hilo linapopatikana.

ProxyManager iliyosanidiwa inamiliki mkusanyiko wa miunganisho kwa maombi. Kwa hali chaguomsingi ya jibu lililopakiwa mapema inayotumika hapa, urllib3 husoma mwili na kurudisha muunganisho kwenye dimbwi lake. Toleo la utiririshaji litahitaji matumizi ya wazi na kuachiliwa kwa muunganisho.

maxsize kwa kawaida hudhibiti miunganisho inayoweza kutumika tena iliyohifadhiwa, si kikomo kigumu kwa kila soketi iliyofunguliwa. block=True hubadilisha tabia husika ya dimbwi ili waitaji wasubiri muunganisho huru badala ya kufungua zaidi ya kikomo cha dimbwi hilo.

Idadi ya wafanyakazi huweka kikomo cha simu za wakati mmoja katika mfano huu. Kukiwa na maeneo mengi ya mwisho, mpangilio wa dimbwi na njia inayotumika kwa vichuguu vya HTTPS pia ni muhimu; mpangilio wa dimbwi moja haupaswi kuelezewa kama kikomo cha jumla cha soketi kwa kila mwenyeji.

Makala zinazohusiana