max_workers=8 ຈຳກັດຈຳນວນກະທູ້ທີ່ປະຕິບັດ. ແຕ່ມັນບໍ່ໄດ້ຫ້າມວົງສົ່ງຂໍ້ມູນແຍກຕ່າງຫາກຈາກການສ້າງ Future ສຳລັບແຕ່ລະຈຸດປາຍທາງໃນຂໍ້ມູນເຂົ້າຂະໜາດໃຫຍ່.

Python 3.14 ເພີ່ມຕົວເລືອກການອ່ານລ່ວງໜ້າແບບມີຂອບເຂດ:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=8) as executor:
    for result in executor.map(check_proxy, endpoints, buffersize=24):
        record_result(result)

check_proxy ແມ່ນການກວດສອບແບບ synchronous ທີ່ມີຢູ່ແລ້ວ ພ້ອມກຳນົດເວລາເຄືອຂ່າຍ ແລະ ການເຮັດຄວາມສະອາດ; record_result ຈັດການການສັງເກດທີ່ມັນສົ່ງຄືນ. ຄ່າ 8 ແລະ 24 ແມ່ນງົບປະມານຕົວຢ່າງ. ບັນຊີພຣັອກຊີຟຣີ ສະໜອງຜູ້ສະໝັກສາທາລະນະສຳລັບຈຸດປາຍທາງ; ຮັກສາໂປຣໂຕຄອນຂອງພວກມັນກັບແຕ່ລະທີ່ຢູ່ ເພື່ອໃຫ້ check_proxy ໃຊ້ການຂົນສົ່ງທີ່ຖືກຕ້ອງ.

ເມື່ອບັຟເຟີການສົ່ງເຕັມ, map ຈະຢຸດການໃຊ້ອິເທີຣະເບິນຈົນກວ່າຜົນຈະຖືກສົ່ງອອກ. ອັນນີ້ຍັງໃຊ້ກັບເຄື່ອງສ້າງ.

map ຍັງສົ່ງຕາມລຳດັບຂໍ້ມູນເຂົ້າ: ການກວດສອບຕອນຕົ້ນທີ່ຊ້າອາດກັກຜົນທີ່ສຳເລັດແລ້ວໄວ້ ແລະ ເຮັດໃຫ້ຂໍ້ມູນເຂົ້າຕື່ມຊ້າລົງ. ສຳລັບການປະມວນຜົນຕາມລຳດັບສຳເລັດ ໃຫ້ໃຊ້ຊຸດ futures ທີ່ມີຂອບເຂດຢ່າງຊັດເຈນ ແລະ ເຕີມຄືນເມື່ອພວກມັນສຳເລັດ.

ຈັດການຄວາມລົ້ມເຫຼວຂອງເຄືອຂ່າຍທີ່ຄາດຫວັງພາຍໃນການກວດສອບ ຖ້າຊຸດຕ້ອງສົ່ງຜົນຕໍ່ໄປ. ຂໍ້ຍົກເວັ້ນທີ່ບໍ່ໄດ້ຈັດການຈະຖືກຍົກຂຶ້ນເມື່ອເອົາລາຍການນັ້ນ. chunksize ໃນ ThreadPoolExecutor ບໍ່ໃຫ້ງົບປະມານການສົ່ງນີ້ ແລະ Python ສະບັບກ່ອນໆບໍ່ມີ buffersize.

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