مقاطعة وظيفة مع انتهاء المهلة في بايثون
عند استدعاء الوظائف التي قد تتوقف إلى أجل غير مسمى، مما يمنع البرنامج النصي من التنفيذ بشكل أكبر، يصبح من الضروري تنفيذ آلية المهلة. توفر حزمة signal في Python حلاً لهذه المشكلة.
حزمة signal، المستخدمة بشكل أساسي في أنظمة UNIX، تسمح لك بإعداد مهلة لوظيفة معينة. إذا تجاوزت الدالة المهلة المحددة، يتم رفع إشارة لمقاطعة التنفيذ.
مثال:
ضع في اعتبارك دالة Loop_forever () التي قد تعمل إلى أجل غير مسمى. نحن بحاجة إلى استدعاء هذه الوظيفة ولكن تعيين مهلة قدرها 5 ثوان. إذا كانت الوظيفة تستغرق أكثر من 5 ثوان، نريد إلغاء تنفيذها.إشارة الاستيراد # سجل معالجًا للمهلة معالج Def (الإشارة والإطار): طباعة ("المهلة! إلغاء تنفيذ الوظيفة.") رفع الاستثناء ("تم تجاوز المهلة!") # سجل معالج وظيفة الإشارة إشارة.إشارة (إشارة.SIGALRM، معالج) # تحديد مهلة 5 ثواني إشارة إنذار(5) يحاول: حلقة_للأبد () باستثناء الاستثناء كـ e: طباعة (شارع (ه)) # قم بإلغاء المؤقت إذا انتهت الوظيفة قبل انتهاء المهلة signal.alarm(0)import signal # Register a handler for the timeout def handler(signum, frame): print("Timeout! Cancelling function execution.") raise Exception("Timeout exceeded!") # Register the signal function handler signal.signal(signal.SIGALRM, handler) # Define a timeout of 5 seconds signal.alarm(5) try: loop_forever() except Exception as e: print(str(e)) # Cancel the timer if the function finishes before timeout signal.alarm(0)في هذا المثال، بعد 5 ثوانٍ، يتم استدعاء وظيفة المعالج، مما يؤدي إلى ظهور استثناء. تم اكتشاف هذا الاستثناء في الكود الأصلي، والذي يقوم بعد ذلك بإلغاء المؤقت وإنهاء تنفيذ وظيفة ()loop_forever.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3