map ya bwawa humpa mfanyakazi kipengee kimoja kwa wakati mmoja. Fanya kipengee hicho kuwa kazi kamili, ikiwa ni pamoja na URL na proksi iliyochaguliwa, ili mfanyakazi asikisie njia yake kutoka kwenye orodha ya kimataifa inayobadilika.

Kwa urls zenye kikomo, toa orodha isiyo tupu ya URL za proksi zilizothibitishwa. Wagombea wa HTTP wa umma wanapatikana katika orodha ya proksi za 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 na handle_result hutolewa na programu. Mratibu hugawa vituo vya mwisho kwa mpangilio unaorudiwa; kila mfanyakazi hupokea jozi moja isiyobadilika. Kurudia matokeo pia hufichua hitilafu za wafanyakazi.

Wafanyakazi watano hupunguza kazi zinazoendelea, si kazi zinazoendelea kwa kila proksi. Ikiwa orodha ina vituo viwili vya mwisho, kazi kadhaa zinaweza kutumia kituo kimoja kwa wakati mmoja. Ongeza kanuni tofauti ya uwezo kwa kila kituo cha mwisho inapohitajika. Kwa kazi moja inayoendelea kwa kila URL ya kituo cha mwisho, ukodishaji wa foleni uliosawazishwa inaweza kuhifadhi na kurudisha kila ingizo.

Jaribio la mara ya pili linapaswa kuunda jaribio jipya lenye kikomo kwa URL hiyo hiyo. Epuka simu za kurudia za jaribio zinazoondoa maingizo kutoka kwenye orodha inayoshirikiwa: mfanyakazi mwingine anaweza kuwa anachagua kutoka humo, na orodha iliyokwisha bado inahitaji matokeo ya wazi.

Makala zinazohusiana