map ຂອງສະລອຍສົ່ງລາຍການໜຶ່ງໃຫ້ຜູ້ຮັບວຽກໃນແຕ່ລະເທື່ອ. ເຮັດໃຫ້ລາຍການນັ້ນເປັນວຽກຄົບຖ້ວນ ລວມທັງ URL ແລະ proxy ທີ່ເລືອກ ເພື່ອບໍ່ໃຫ້ຜູ້ຮັບວຽກຄາດເດົາເສັ້ນທາງຂອງຕົນຈາກລາຍການທົ່ວໂລກທີ່ປ່ຽນແປງ.

ສຳລັບ urls ທີ່ມີຈຳນວນຈຳກັດ ໃຫ້ລະບຸລາຍການ URL proxy ທີ່ຜ່ານການກວດສອບທີ່ບໍ່ຫວ່າງເປົ່າ. ຜູ້ສະໝັກ HTTP ສາທາລະນະມີຢູ່ໃນ ລາຍການ 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 ແລະ handle_result ຖືກສະໜອງໂດຍແອັບພລິເຄຊັນ. ຜູ້ປະສານງານກຳນົດຈຸດປາຍທາງໃນລຳດັບທີ່ເກີດຊ້ຳ; ຜູ້ຮັບວຽກແຕ່ລະຄົນໄດ້ຮັບຄູ່ຄົງທີ່ໜຶ່ງຄູ່. ການເຮັດຊ້ຳເທິງຜົນລັບຍັງເປີດເຜີຍຂໍ້ຍົກເວັ້ນຂອງຜູ້ຮັບວຽກ.

ຜູ້ຮັບວຽກຫ້າຄົນຈຳກັດວຽກທີ່ເຄື່ອນໄຫວ ບໍ່ແມ່ນວຽກທີ່ເຄື່ອນໄຫວຕໍ່ proxy. ຖ້າລາຍການມີຈຸດປາຍທາງສອງຈຸດ ຫຼາຍວຽກສາມາດໃຊ້ຈຸດປາຍທາງດຽວກັນໃນເວລາດຽວກັນ. ເພີ່ມກົດລະບຽບຄວາມຈຸແຍກຕ່າງຫາກຕໍ່ຈຸດປາຍທາງເມື່ອຕ້ອງການ. ສຳລັບວຽກທີ່ເຄື່ອນໄຫວໜຶ່ງວຽກຕໍ່ URL ຈຸດປາຍທາງ ການເຊົ່າຄິວທີ່ຊິງໂຄຣນາຍ ສາມາດຈອງ ແລະ ສົ່ງຄືນແຕ່ລະລາຍການໄດ້.

ການລອງໃໝ່ຄວນສ້າງຄວາມພະຍາຍາມທີ່ມີຂອບເຂດໃໝ່ສຳລັບ URL ດຽວກັນ. ຫຼີກລ່ຽງການເອີ້ນລອງໃໝ່ແບບເກີດຊ້ຳທີ່ລຶບລາຍການອອກຈາກລາຍການຮ່ວມ: ຜູ້ຮັບວຽກອື່ນອາດກຳລັງເລືອກຈາກມັນ ແລະ ລາຍການທີ່ໝົດແລ້ວຍັງຕ້ອງການຜົນລັບທີ່ຊັດເຈນ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ