تقنية

timeit في بايثون: هل يبقى جمع القمامة معطلًا بعد القياس؟

حالة الجامع قبل القياس وأثناءه وبعده
gc.isenabled() في المثال. [1] [2]

راقب الحالة داخل القياس وبعده. [1] [2]

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

يعطل timeit جامع gc مؤقتًا افتراضيًا. [1] [2]

  • نفعل الجامع قبل المثال. [1] [2]
  • نسجل gc.isenabled() داخل العبارة المقاسة. [1] [2]
  • التسجيل يعطي [False]. [1] [2]
  • بعد القياس تعود الحالة إلى True. [1] [2]
  • اختبرنا 3.12.14 بإعداد افتراضي وعبارة لا تغير حالة الجامع؛ لا نقارن السرعة. [1] [2]

المثال

import gc,timeit
gc.enable();seen=[]
t=timeit.Timer(
 'seen.append(gc.isenabled())',
 globals={'gc':gc,'seen':seen})
t.timeit(number=1)
print(seen)
print(gc.isenabled())

[1] [2]

المخرجات: [False] ثم True. [1] [2]

قبل وأثناء وبعد

نمرر الأسماء عبر globals. في التنفيذ المثبت تُحفظ حالة الجامع قبل التعطيل، ويعاد تفعيله إن كان مفعّلًا عند الدخول. [1] [2]

بعد القياس يعود التفعيل في مثالنا. إن بدأ معطلًا، يظل معطلًا مع العبارة نفسها. [1] [2]

حالتا البداية مع عبارة رصد فقط
الإعداد الافتراضي؛ العبارة لا تغير الجامع. [1] [2]

حدود النتيجة

لا نعمم ذلك على إعداد أو عبارة يغيران الجامع. فحص العلم لا يقيس مقدار الذاكرة المحررة أو سرعة برنامجك. [1] [2]

المراجع

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

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