Assenja URL u proxy lil kull xogħol Python ThreadPoolExecutor
Assenja proxy qabel ma tissottometti xogħol ta' talba Python minflok tħalli l-ħaddiema jikkompetu fuq stat ta' għażla kondiviż li jinbidel.
Il-map ta' pool tgħaddi oġġett wieħed lill-ħaddiem kull darba. Agħmel dak l-oġġett xogħol sħiħ, inkluż l-URL u l-proxy magħżul, sabiex il-ħaddiem ma jisletx it-triq tiegħu minn lista globali li tinbidel.
Għal urls finiti, ipprovdi lista mhux vojta ta' URL tal-proxy validati. Kandidati HTTP pubbliċi huma disponibbli fil-lista tal-proxy HTTP:
from concurrent.futures import ThreadPoolExecutor
from itertools import cycle
import requests
def fetch(job):
url, proxy_url = job
proxies = {"http": proxy_url, "https": proxy_url}
with requests.get(url, proxies=proxies, timeout=(5, 15)) as response:
response.raise_for_status()
return url, response.text
if not proxy_urls:
raise ValueError("No proxy endpoints were supplied")
jobs = zip(urls, cycle(proxy_urls))
with ThreadPoolExecutor(max_workers=5) as executor:
for url, body in executor.map(fetch, jobs):
handle_result(url, body)urls, proxy_urls u handle_result huma pprovduti mill-applikazzjoni. Il-koordinatur jassenja punti tat-tarf f'ordni ripetut; kull ħaddiem jirċievi par fiss wieħed. L-iterazzjoni tar-riżultati turi wkoll l-eċċezzjonijiet tal-ħaddiema.
Ħames ħaddiema jillimitaw ix-xogħlijiet attivi, mhux ix-xogħlijiet attivi għal kull proxy. Jekk il-lista għandha żewġ punti tat-tarf, diversi xogħlijiet jistgħu jużaw l-istess punt tat-tarf fl-istess waqt. Żid regola ta' kapaċità separata għal kull punt tat-tarf meta jkun meħtieġ. Għal xogħol attiv wieħed għal kull URL ta' punt tat-tarf, kiri tal-kju sinkronizzat jista' jirriżerva u jirritorna kull entrata.
Tentattiv mill-ġdid għandu joħloq tentattiv limitat ġdid għall-istess URL. Evita sejħiet ta' tentattiv mill-ġdid rekursivi li jneħħu entrati minn lista kondiviża: ħaddiem ieħor jista' jkun qed jagħżel minnha, u lista eżawrita xorta teħtieġ riżultat espliċitu.