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 คือการตรวจสอบแบบซิงโครนัสที่มีอยู่ พร้อมกำหนดเวลาของเครือข่ายและการทำความสะอาด; record_result จัดการการสังเกตที่ส่งคืนมา ค่า 8 และ 24 เป็นงบประมาณตัวอย่าง รายการพร็อกซีฟรี มีผู้สมัครสาธารณะสำหรับปลายทาง เก็บโปรโตคอลไว้กับแต่ละที่อยู่เพื่อให้ check_proxy ใช้การขนส่งที่ถูกต้อง

เมื่อบัฟเฟอร์การส่งเต็ม map จะหยุดบริโภคออบเจ็กต์ที่วนซ้ำได้จนกว่าจะส่งผลลัพธ์ออกมา ทั้งนี้ใช้กับเครื่องกำเนิดด้วย

map ยังคงให้ผลตามลำดับอินพุต การตรวจสอบช่วงต้นที่ช้าอาจกักผลลัพธ์ภายหลังที่เสร็จแล้วไว้และทำให้อินพุตเพิ่มเติมล่าช้า สำหรับการประมวลผลตามลำดับการเสร็จสิ้น ให้ใช้ชุด futures ที่จำกัดอย่างชัดเจนและเติมใหม่เมื่อเสร็จ

จัดการความล้มเหลวของเครือข่ายที่คาดไว้ภายในการตรวจสอบ หากชุดยังต้องส่งผลลัพธ์ต่อ ข้อยกเว้นที่ไม่ได้จัดการจะถูกโยนเมื่อดึงรายการนั้น chunksize ใน ThreadPoolExecutor ไม่มีงบประมาณการส่งนี้ และ Python เวอร์ชันก่อนหน้าไม่มี buffersize

บทความที่เกี่ยวข้อง