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.

Artikli relatati