ເກັບທຸກຜົນລັບຈາກຄຳຮ້ອງຂໍ proxy urllib3 ທີ່ເກີດຂຶ້ນພ້ອມກັນ
ແບ່ງປັນ ProxyManager ທີ່ຕັ້ງຄ່າແລ້ວລະຫວ່າງກະທູ້ເຮັດວຽກ, ໃຊ້ຕົວວົນຊ້ຳຜົນລັບຂອງຕົວປະຕິບັດ ແລະ ແຍກການຮັກສາພຸລອອກຈາກຂີດຈຳກັດການເຊື່ອມຕໍ່.
ການສ້າງພຸລຜູ້ເຮັດວຽກບໍ່ໄດ້ສົ່ງໜ້າທີ່ດາວໂຫລດແລ້ວໃຫ້ຜູ້ເອີ້ນ. ເກັບ ແລະ ໃຊ້ຄ່າທີ່ວຽກທີ່ສົ່ງໄປສົ່ງຄືນ:
from concurrent.futures import ThreadPoolExecutor
import urllib3
manager = urllib3.ProxyManager(
'http://proxy.example:8080',
maxsize=4,
block=True,
)
def fetch(url):
response = manager.request(
'GET', url, timeout=urllib3.Timeout(connect=5, read=15),
)
return url, response.status, response.data
try:
with ThreadPoolExecutor(max_workers=4) as workers:
results = list(workers.map(fetch, urls))
finally:
manager.clear()ສ່ວນນີ້ສົມມຸດວ່າມີລາຍຊື່ URL ຈຳກັດ ແລະ ຂະໜາດຄຳຕອບປົກກະຕິ. ສຳລັບການກວດ URL ສາທາລະນະທີ່ໄດ້ຮັບອະນຸຍາດໂດຍບໍ່ມີການຢືນຢັນ proxy, ຜູ້ສະໝັກຈາກລາຍຊື່ proxy HTTPສາມາດແທນຈຸດປາຍ HTTP ຕົວຢ່າງຂອງຜູ້ຈັດການໄດ້. ທຸກຜົນລັບມີ URL ຂອງມັນ ເພື່ອໃຫ້ຜູ້ເອີ້ນເຊື່ອມສະຖານະ ແລະ ເນື້ອຫາກັບຄຳຮ້ອງຂໍທີ່ຖືກຕ້ອງ. map ສົ່ງຄືນຜົນລັບຕາມລຳດັບອິນພຸດ; ຂໍ້ຍົກເວັ້ນໃນຜູ້ເຮັດວຽກຈະຖືກຍົກຂຶ້ນເມື່ອເອົາຜົນລັບນັ້ນ.
ProxyManager ທີ່ຕັ້ງຄ່າແລ້ວເປັນເຈົ້າຂອງພຸລການເຊື່ອມຕໍ່ສຳລັບຄຳຮ້ອງຂໍ. ດ້ວຍໂໝດຄຳຕອບທີ່ໂຫລດລ່ວງໜ້າຕາມຄ່າເລີ່ມຕົ້ນທີ່ໃຊ້ຢູ່ນີ້, urllib3 ອ່ານເນື້ອຫາ ແລະ ສົ່ງການເຊື່ອມຕໍ່ຄືນສູ່ພຸລຂອງມັນ. ສະບັບສະຕຣີມຈະຕ້ອງມີການໃຊ້ຢ່າງຊັດເຈນ ແລະ ການປ່ອຍການເຊື່ອມຕໍ່.
maxsize ໂດຍປົກກະຕິຄວບຄຸມການເຊື່ອມຕໍ່ທີ່ເກັບໄວ້ໃຊ້ຄືນໄດ້, ບໍ່ແມ່ນຂີດຈຳກັດແຂງຕໍ່ທຸກຊອກເກັດທີ່ເປີດ. block=True ປ່ຽນພຶດຕິກຳພຸລທີ່ກ່ຽວຂ້ອງ ເພື່ອໃຫ້ຜູ້ເອີ້ນລໍຖ້າການເຊື່ອມຕໍ່ທີ່ຫວ່າງ ແທນທີ່ຈະເປີດເພີ່ມເກີນຂີດຈຳກັດຂອງພຸລນັ້ນ.
ຈຳນວນຜູ້ເຮັດວຽກຈຳກັດການເອີ້ນພ້ອມກັນໃນຕົວຢ່າງນີ້. ດ້ວຍປາຍທາງຫຼາຍແຫ່ງ, ການຈັດວາງພຸລ ແລະ ເສັ້ນທາງທີ່ໃຊ້ສຳລັບອຸໂມງ HTTPS ກໍສຳຄັນ; ການຕັ້ງຄ່າຕໍ່ພຸລບໍ່ຄວນຖືກອະທິບາຍວ່າເປັນໂຄຕາຊອກເກັດທົ່ວໂລກດຽວສຳລັບທຸກໂຮສ.