Map hjá einum pool letur eitt stak til arbeiðsmannin í senn. Ger tað stakkið at eini fullari uppgávu, eisini URL og valda proxy, so arbeiðsmaðurin ikki útleiðir leið sína úr einum broytiligum globalum lista.

Fyri endalig urls, veit eina ikki-tóma lista av váttførkaðum proxy-URL'um. Opinber HTTP-valmøgulig eru tøk í HTTP-proxy-listin:

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 og handle_result verða veitt av forritinum. Samskiparin setur endapunkta í endurtakandi raðfylgju; hvør arbeiðsmaður fær eitt fast par. At iterera úrslitini vísir eisini undantøk arbeiðsmanna.

Fimm arbeiðsmenn avmarka virknar uppgávur, ikki virknar uppgávur fyri hvørt proxy. Hevur listin tveir endapunkta, kunnu fleiri uppgávur brúka sama endapunt í senn. Legg eina serstaka kapasitetsreglu fyri hvønn endapunt aftrat, tá ið tað er neyðugt. Fyri eina virkna uppgávu fyri hvønn endapunts-URL kann ein samstillað leiga av bíðirøð bóka og lata hvørja innførslu aftur.

Ein endurroynd skal gera eina nýggja avmarkaða roynd fyri sama URL. Forða tær frá endurtakandi endurroyndar-køllum, sum taka innførslur úr einum felags lista: ein annar arbeiðsmaður kann vera at velja úr honum, og ein upptømdur listi krevur framvegis eitt greitt úrslit.

Skyldar greinar