تقنية

data في selectors: هل تُستدعى الدالة عند الجاهزية؟

الدالة المرفقة نفسها والعداد صفر بعد التسجيل والجاهزية
رصد المثال المحلي. [1] [2]

نميّز إرفاق الدالة عن استدعائها. [1] [2]

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

الجاهزية لم تشغّل دالتنا هنا. [1] [2]

  • نرفق f في data. [1] [2]
  • نرسل R بين مقبسين. [3]
  • يعيد select مفتاحًا يحمل الدالة نفسها. [1] [2]
  • يبقى عداد الاستدعاء 0. [1] [2]
  • استدعاؤنا الصريح يرفعه إلى 1. [1] [2]

المثال

import socket, selectors as s
a,b=socket.socketpair()
seen=[]
def f(*args): seen.append(1)
try:
 with s.DefaultSelector() as q:
  q.register(b,s.EVENT_READ,f)
  a.sendall(b'R')
  k,m=q.select(1)[0]
  print(k.data is f,len(seen))
  k.data(k.fileobj,m)
  print(len(seen))
  q.unregister(b)
finally: a.close();b.close()

[1] [2] [3]

المخرجان True 0 ثم 1. [1] [2]

المفتاح ليس استدعاءً

data كائن مرفق؛ select يعيد أزواج المفتاح وقناع الأحداث. التطبيق يختار استدعاء الدالة. [1] [2]

بعد الاستدعاء الصريح يزيد عدادنا؛ جسم الدالة لا يقرأ المقبس. [1] [2]

العداد صفر عند الجاهزية وواحد بعد استدعائنا الصريح
الاستدعاء خطوة منفصلة. [1] [2]

حد التجربة

اختبرنا ويندوز و3.12.14 باستخدام SelectSelector. نلغي التسجيل قبل الإغلاق؛ ليست تجربة خادم أو تزامن. [1] [2] [3]

المراجع

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

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