"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التعامل مع مقاطعات لوحة المفاتيح بشكل رشيق في مجمعات المعالجة المتعددة في Python؟

كيفية التعامل مع مقاطعات لوحة المفاتيح بشكل رشيق في مجمعات المعالجة المتعددة في Python؟

تم النشر بتاريخ 2024-11-08
تصفح:308

How to Gracefully Handle Keyboard Interrupts in Python Multiprocessing Pools?

التعامل اللطيف مع مقاطعات لوحة المفاتيح في تجمعات المعالجة المتعددة لـ Python

عند العمل مع تجمع المعالجة المتعددة في Python، فإن التعامل مع أحداث KeyboardInterrupt ليس دائمًا أمرًا سهلاً. في هذه المقالة، سوف نستكشف كيفية التعامل مع مثل هذه المقاطعات والتأكد من خروج العمليات بأمان.

يوضح نموذج التعليمات البرمجية المقدم التحدي. على الرغم من وجود كتلة التقاط لـ KeyboardInterrupt، إلا أنها لا يتم تنفيذها عند الضغط على مفتاح التحكم-C. بدلاً من ذلك، يتوقف البرنامج حتى يتم إنهاؤه خارجيًا.

يكمن جذر هذه المشكلة في خطأ بايثون يتعلق بحظر شرط في Threading.Condition.wait(). في هذا السياق، لا يتم إرسال KeyboardInterrupt مطلقًا. ونتيجة لذلك، فإنه يمنع معالجة المقاطعة داخل المجمع.

أحد الحلول لهذه المشكلة هو تحديد مهلة عند انتظار النتائج. يمكن استخدام الأسلوب Map_async() مع معلمة المهلة بدلاً من الخريطة(). يسمح هذا الأسلوب بالتعرف على مقاطعة لوحة المفاتيح ومعالجتها:

results = pool.map_async(slowly_square, range(40)).get(9999999)

عن طريق تعيين قيمة مهلة كبيرة ، فإننا نخبر المجمع بشكل أساسي بمواصلة انتظار النتائج حتى يقاطعها المستخدم.

من المهم ملاحظة أن هناك بعض القيود على هذا الحل البديل. إذا انتهت المهلة قبل اكتمال جميع المهام، فسيتم تجاهل النتائج غير المكتملة. لذلك، من الضروري اختيار قيمة المهلة المناسبة التي توازن بين الاستجابة وخطر النتائج غير المكتملة.

بيان الافراج يتم استنساخ هذه المقالة في: 1729576455 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3