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.

مقالات ذات صلة