Ang paggawa ng worker pool ay hindi nagbibigay sa tumatawag ng mga na-download na pahina. Itago at gamitin ang mga halagang ibinabalik ng isinumiteng trabaho:

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

Ipinapalagay ng bahaging ito ang limitadong listahan ng URL at karaniwang laki ng tugon. Para sa pinapayagang pampublikong URL check na walang proxy authentication, maaaring palitan ng kandidato mula sa listahan ng HTTP proxy ang halimbawang HTTP endpoint ng manager. Kasama sa bawat resulta ang URL nito upang maiugnay ng tumatawag ang status at katawan sa tamang request. Ibinabalik ng map ang mga resulta sa pagkakasunod-sunod ng input; ang exception sa isang worker ay itinataas kapag kinuha ang resultang iyon.

Pagmamay-ari ng naka-configure na ProxyManager ang connection pooling para sa mga request. Sa default na preloaded response mode na ginagamit dito, binabasa ng urllib3 ang katawan at ibinabalik ang koneksyon sa pool nito. Ang streaming na bersyon ay mangangailangan ng tahasang paggamit at pagpapalaya ng koneksyon.

Karaniwang kinokontrol ng maxsize ang mga pinapanatiling magagamit muli na koneksyon, hindi isang matigas na limitasyon sa bawat bukas na socket. Binabago ng block=True ang kaugnay na pag-uugali ng pool upang maghintay ang mga tumatawag ng libreng koneksyon sa halip na magbukas ng dagdag na lampas sa limitasyon ng pool na iyon.

Nililimitahan ng bilang ng worker ang sabay-sabay na tawag sa halimbawang ito. Sa maraming destinasyon, mahalaga rin ang layout ng pool at ang rutang ginagamit para sa HTTPS tunnel; ang setting para sa isang pool ay hindi dapat ilarawan bilang isang pandaigdigang socket quota para sa bawat host.

Kaugnay na mga artikulo