buffersize של Executor.map בפייתון 3.14 לקבוצות פרוקסי גדולות
השתמשו ב-buffersize של Executor.map בפייתון 3.14 כדי להשהות את צריכת הקלט בזמן שהתוצאות ממתינות, ללא תלות ב-max_workers.
max_workers=8 מגביל את התהליכונים המבצעים. אך הוא אינו מונע מלולאת שליחה נפרדת ליצור Future לכל נקודת קצה בקלט עצום.
פייתון 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 אינו מספק תקציב שליחה זה, וגרסאות פייתון קודמות חסרות buffersize.