Пулдун map функциясы жумушчуга бир убакта бир элемент берет. Ошол элементти толук ишке айландырыңыз, URL жана тандалган прокси менен, жумушчу өз маршрутун өзгөрмө глобалдык тизмеден божомолдобошу үчүн.

Чектелген urls үчүн текшерилген прокси URL тизмесин бош эмес кылып бериңиз. Коомдук HTTP талапкерлери 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 жана handle_result колдонмо тарабынан берилет. Координатор акыркы чекиттерди кайталануучу тартипте дайындайт; ар бир жумушчу бир туруктуу жуп алат. Натыйжаларды кайталоо жумушчулардын өзгөчөлүктөрүн да ачат.

Беш жумушчу активдүү иштерди чектейт, проксиге активдүү иштерди эмес. Тизмеде эки акыркы чекит болсо, бир нече иш бир эле чекитти бир убакта колдоно алат. Керек болсо ар бир акыркы чекит үчүн өзүнчө сыйымдуулук эрежесин кошуңуз. Ар бир акыркы чекит URL үчүн бир активдүү иш үчүн синхрондоштурулган кезек ижарасы ар бир жазууну резервдеп кайтара алат.

Кайталоо аракети ошол эле URL үчүн жаңы чектелген аракетти түзүшү керек. Жалпы тизмеден жазууларды алып салуучу рекурсивдүү кайталоо чакырууларынан качыңыз: башка жумушчу андан тандап жаткан болушу мүмкүн, жана бүткөн тизме дагы деле так натыйжаны талап кылат.

Тектеш макалалар