ກຳນົດ URL ແລະ proxy ໃຫ້ແຕ່ລະວຽກ Python ThreadPoolExecutor
ກຳນົດ proxy ກ່ອນທີ່ຈະສົ່ງວຽກຄຳຮ້ອງ Python ແທນທີ່ຈະປ່ອຍໃຫ້ຜູ້ຮັບວຽກແຂ່ງກັນເທິງສະຖານະການເລືອກຮ່ວມທີ່ປ່ຽນແປງໄດ້.
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 ດຽວກັນ. ຫຼີກລ່ຽງການເອີ້ນລອງໃໝ່ແບບເກີດຊ້ຳທີ່ລຶບລາຍການອອກຈາກລາຍການຮ່ວມ: ຜູ້ຮັບວຽກອື່ນອາດກຳລັງເລືອກຈາກມັນ ແລະ ລາຍການທີ່ໝົດແລ້ວຍັງຕ້ອງການຜົນລັບທີ່ຊັດເຈນ.