باستخدام وحدة timeit في مكتبة Python القياسية ، يمكنك بسهولة قياس وقت تنفيذ عملية في التعليمات البرمجية الخاصة بك. هذا مفيد لفحص سريع.
ستتم مناقشة الحالتين التاليتين هنا.
- القياس في ملف بايثون:
timeit.timeit()
وtimeit.repeat()
- القياس باستخدام دفتر Jupyter:
%timeit
و%%timeit
هناك طريقة أخرى وهي استخدام time.time () لقياس الوقت المنقضي في البرنامج.
القياسات في ملفات Python: timeit.timeit () ، timeit.repeat ()
كمثال ، سنقوم بقياس وقت معالجة وظيفة بسيطة ، اختبار (ن) ، الذي يحسب مجموع n من الأرقام المتتالية.
import timeit
def test(n):
return sum(range(n))
n = 10000
loop = 1000
result = timeit.timeit('test(n)', globals=globals(), number=loop)
print(result / loop)
# 0.0002666301020071842
إذا قمت بتمرير الرمز الذي تريد قياسه كسلسلة لوظيفة timeit.timeit () ، فسيتم تنفيذه عدة مرات وسيتم إرجاع الوقت الذي استغرقته.
القيمة الافتراضية للرقم هي 1،000،000. لاحظ أنه إذا كنت تستخدم القيمة الافتراضية لعملية تستغرق وقتًا طويلاً ، فسوف تستغرق الكثير من الوقت.
بتمرير globals () كمتغيرات جلوبال وسيطة ، سيتم تنفيذ الكود في مساحة الاسم العالمية.
بدون ذلك ، لا يتم التعرف على اختبار الوظيفة والمتغير n في المثال أعلاه.
يمكن أن تكون الكود المطلوب تحديده كائنًا قابلاً للاستدعاء بدلاً من سلسلة ، لذلك يمكن تحديده كتعبير lambda بدون وسيطات ؛ في هذه الحالة ، لا تحتاج الحجة globals إلى التحديد.
result = timeit.timeit(lambda: test(n), number=loop)
print(result / loop)
# 0.00027574066299712287
وحدة النتيجة هي ثواني. هنا ، الناتج هو وقت المعالجة لكل تنفيذ مقسومًا على عدد عمليات التنفيذ.
إذا لم تقم بالقسمة ، فستصبح قيمة النتيجة أكبر كلما زادت عدد عمليات التنفيذ.
print(timeit.timeit(lambda: test(n), number=1))
print(timeit.timeit(lambda: test(n), number=10))
print(timeit.timeit(lambda: test(n), number=100))
# 0.0003999490290880203
# 0.0038685189792886376
# 0.03517670702422038
باستخدام وظيفة timeit.repeat () ، يمكن تنفيذ timeit () بشكل متكرر. سيتم الحصول على النتيجة في شكل قائمة.
repeat = 5
print(timeit.repeat(lambda: test(n), repeat=repeat, number=100))
# [0.044914519996382296, 0.039663890027441084, 0.02868645201670006, 0.022745631984435022, 0.023260265996214002]
القياس باستخدام دفتر Jupyter:%timeit, %%timeit
في Jupyter Notebook (IPython) ، يمكنك استخدام الأوامر السحرية التالية ؛ ليست هناك حاجة لاستيراد وحدة الوقت.
%timeit
%%timeit
٪الوقت هو
في٪ timeit ، حدد رمز الهدف مفصولاً بمسافة مثل وسيطات سطر الأوامر.
بشكل افتراضي ، يتم تحديد الرقم والتكرار في timeit.timeit () تلقائيًا. يمكنك أيضًا تحديدها باستخدام خياري -n و -r.
يتم حساب النتائج على أنها متوسط وانحراف معياري.
%timeit test(n)
# 259 µs ± 4.87 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit -r 3 -n 10000 test(n)
# 237 µs ± 6.44 µs per loop (mean ± std. dev. of 3 runs, 10000 loops each)
٪٪الوقت هو
يمكن استخدام الأمر السحري ٪٪ timeit لقياس وقت المعالجة لخلية بأكملها.
كمثال ، لنقم بتشغيل نفس العملية باستخدام NumPy. يمكن حذف الخيارين -n و -r.
نظرًا لأننا نقيس وقت معالجة الخلية بأكملها ، فإن المثال التالي يتضمن وقت استيراد NumPy.
%%timeit -r 3 -n 10000
import numpy as np
a = np.arange(n)
np.sum(a)
# 19.7 µs ± 9.57 µs per loop (mean ± std. dev. of 3 runs, 10000 loops each)
ليست هناك حاجة لتحديد رمز الهدف كوسيطة لـ ٪٪ timeit. كل ما عليك فعله هو كتابة ٪٪ timeit في بداية الخلية ، لذلك فهي أسهل استخدامًا.