Casglu pob canlyniad o geisiadau proxy urllib3 cyfochrog
Rhannwch ProxyManager wedi'i ffurfweddu rhwng edafedd gwaith, defnyddiwch iterator canlyniadau'r gweithredwr a gwahaniaethwch gadwraeth pwll oddi wrth derfyn cysylltiadau.
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.