فحوص وكيل Python: لماذا يترك Future.cancel() الخيوط تعمل
افهم لماذا لا يوقف إلغاء المستقبلات المعلّقة فحوص الشبكة النشطة، وحدّد سباق الوكيل دون الادعاء بأنه يثبت سلامة الوجهة.
عامل واحد يجد وكيلاً صالحاً. تعيد عنوانه، وتستدعي cancel على المستقبلات الأخرى، وتتوقع أن يتوقف نشاط الشبكة. قد لا يتوقف.
يمكن إلغاء Future قبل أن يبدأ ما يستدعيه. بمجرد أن ينفّذ خيط طلباً بالفعل، فإن إلغاء Future الخاص به لا يقاطع عملية المقبس تلك. يحتاج العامل إلى عملية شبكة محدودة خاصة به ومسار تنظيف.
عمر المنفّذ مهم أيضاً. ترك سياق ThreadPoolExecutor ينتظر انتهاء عمله. إن العثور على نتيجة سريعة واحدة ثم الانتظار لعدة عمال بطيئين قد يجعل إجمالي تأخير المستدعي لا يشبه على الإطلاق زمن الاستجابة المبلغ عنه للفائز.
حدّد السباق قبل أن يبدأ
- حدّ من عدد الفحوص المتزامنة بدلاً من تقديم قائمة عامة غير محدودة. توفر قائمة الوكلاء المجانية مرشحين لمدخلات الفاحص، مع الاحتفاظ ببروتوكول كل نقطة نهاية للعامل.
- أعط كل طلب سياسة اتصال وقراءة مناسبة.
- أعط المستدعي ميزانية قرار إجمالية.
- حدّد من يستنزف أو يغلق نتائج العمال الذين يعيشون بعد القرار.
الانتظار أقل لـ Future ليس هو نفسه جعل الطلب الأساسي أقصر. وبالمثل، فإن التخلي عن النتيجة لا يحرّر كل مورد شبكة فوراً.
أول نتيجة ناجحة هي أيضاً أول فحص ناجح فقط. يمكن أن تعتمد على الجدولة والاتصالات المخزنة ووجهة الفحص المحددة. وهي لا تثبت أن نقطة النهاية هي الأسرع عالمياً أو أن المهمة الحقيقية ستنجح.
غالباً ما تكون بركة صغيرة محتفظ بها مع ملاحظات حديثة أبسط من التسابق على القائمة بأكملها قبل كل تنزيل. استخدم نتيجة العملية الحقيقية لتحديث السجل، مع سياسة استرداد خاضعة للتحكم للأعطال. ينبغي أن يستحق الفحص المسبق تكلفته بدلاً من مضاعفة كل مهمة بدافع العادة.