Nid yw creu pwll gweithwyr yn rhoi'r tudalennau a lawrlwythwyd i'r galwr. Cadwch a defnyddiwch y gwerthoedd a ddychwelir gan y gwaith a gyflwynwyd:

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

Mae'r darn hwn yn rhagdybio rhestr gyfyngedig o URLau a meintiau ymateb arferol. Ar gyfer gwiriadau URL cyhoeddus a ganiateir heb ddilysu proxy, gall ymgeisydd o'r rhestr proxy HTTP ddisodli pen llwybr HTTP enghreifftiol y rheolwr. Mae pob canlyniad yn cynnwys ei URL fel y gall y galwr gysylltu statws a chorff â'r cais cywir. Mae map yn dychwelyd canlyniadau yn nhrefn y mewnbwn; codir eithriad mewn gweithiwr pan geir y canlyniad hwnnw.

Mae'r ProxyManager wedi'i ffurfweddu yn berchen ar y pwll cysylltiadau ar gyfer y ceisiadau. Gyda'r modd ymateb rhaglwytho diofyn a ddefnyddir yma, mae urllib3 yn darllen y corff ac yn dychwelyd y cysylltiad i'w bwll. Byddai fersiwn ffrydio angen defnydd penodol a rhyddhau cysylltiad.

Yn rheolaidd mae maxsize yn rheoli cysylltiadau a gedwir y gellir eu hailddefnyddio, nid terfyn caled ar bob soced a agorir. Mae block=True yn newid ymddygiad y pwll perthnasol fel bod galwyr yn aros am gysylltiad rhydd yn hytrach nag agor rhai ychwanegol y tu hwnt i derfyn y pwll hwnnw.

Mae nifer y gweithwyr yn cyfyngu galwadau cyfochrog yn yr enghraifft hon. Gyda llawer o gyrchfannau, mae cynllun y pwll a'r llwybr a ddefnyddir ar gyfer twneli HTTPS hefyd yn bwysig; ni ddylid disgrifio gosodiad un pwll fel un cwota soced byd-eang ar gyfer pob gwesteiwr.

Erthyglau cysylltiedig