تقنية

تسجيل معالج الإشارة: هل يشغّل الدالة فورًا؟

الفحص يعيد هوية h بقيمة True ولم يظهر خطأ جسمها
لم نرسل إشارة. [1] [2]

نميّز تسجيل الدالة عن استدعائها. [1] [2]

الخلاصة السريعة

يسجل المثال المعالج دون تنفيذ جسمه هنا. [1] [2]

  • جسم h يرفع خطأ عند استدعائه. [1] [2]
  • نعيّن h لمعالجة SIGINT. [1] [2]
  • يعيد getsignal الدالة نفسها؛ الفحص True. [1] [2]
  • لا نرسل إشارة، ونستعيد المعالج السابق. [1] [2]
  • التسجيل للخيط الرئيسي؛ اختبرنا 3.12.14 على ويندوز. [1] [2]

المثال

import signal as s
def h(n,f):
 raise RuntimeError('ran')
old=s.getsignal(s.SIGINT)
try:
 s.signal(s.SIGINT,h)
 print(s.getsignal(s.SIGINT) is h)
finally: s.signal(s.SIGINT,old)

[1] [2]

الناتج True دون RuntimeError. [1] [2]

ماذا يثبت الفحص؟

الفحص لهوية المعالج، لا لوصول إشارة. [1] [2]

في اختبار عداد: 0 بعد التسجيل والفحص، ثم 1 باستدعاء الدالة يدويًا. [1] [2]

عداد جسم الدالة صفر بعد التسجيل والفحص وواحد بعد استدعاء يدوي
الاستدعاء اليدوي ليس تسليم إشارة. [1] [2]

حدود التجربة

لم نختبر التسليم أو توقيته. قد تصل إشارة أثناء التنفيذ. يستعيد finally الإعداد السابق هنا. [1] [2]

المراجع

  1. Python: signal
  2. CPython 3.12.14: signalmodule.c
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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