Python کے timeit ماڈیول کے ساتھ پروسیسنگ کے وقت کی پیمائش کریں۔

کاروبار

Python معیاری لائبریری کے timeit ماڈیول کا استعمال کرتے ہوئے، آپ آسانی سے اپنے کوڈ میں کسی عمل کے عمل کے وقت کی پیمائش کر سکتے ہیں۔ یہ فوری جانچ کے لیے مفید ہے۔

یہاں درج ذیل دو صورتوں پر بات کی جائے گی۔

  • ازگر فائل میں پیمائش کریں:timeit.timeit(),timeit.repeat()
  • Jupyter نوٹ بک کے ساتھ پیمائش:%timeit,%%timeit

دوسرا طریقہ یہ ہے کہ پروگرام میں گزرے ہوئے وقت کی پیمائش کرنے کے لیے time.time() کا استعمال کریں۔

ازگر فائلوں میں پیمائش: timeit.timeit(), timeit.repeat()

مثال کے طور پر، ہم ایک سادہ فنکشن، ٹیسٹ(n) کے پروسیسنگ ٹائم کی پیمائش کریں گے، جو 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() فنکشن میں ناپنا چاہتے ہیں، تو اسے NUMBER بار عمل میں لایا جائے گا اور اس میں لگنے والا وقت واپس کر دیا جائے گا۔
نمبر کی ڈیفالٹ قدر 1,000,000 ہے۔ نوٹ کریں کہ اگر آپ وقت طلب عمل کے لیے پہلے سے طے شدہ قدر استعمال کرتے ہیں، تو اس میں کافی وقت لگے گا۔

گلوبلز() کو آرگیومینٹ گلوبلز کے طور پر پاس کرنے سے، کوڈ کو عالمی نام کی جگہ پر عمل میں لایا جائے گا۔
اس کے بغیر، اوپر دی گئی مثال میں فنکشن ٹیسٹ اور متغیر n کو تسلیم نہیں کیا گیا ہے۔

جس کوڈ کی وضاحت کی جائے گی وہ سٹرنگ کی بجائے کالبل آبجیکٹ ہو سکتا ہے، اس لیے اسے بغیر کسی دلیل کے لیمبڈا اظہار کے طور پر بیان کیا جا سکتا ہے۔ اس صورت میں، دلیل عالمیوں کی وضاحت کرنے کی ضرورت نہیں ہے۔

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 میں، کمانڈ لائن آرگیومینٹس جیسے اسپیس سے الگ کردہ ٹارگٹ کوڈ کی وضاحت کریں۔

پہلے سے طے شدہ طور پر، 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

میجک کمانڈ %%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 لکھنا ہے، اس لیے اسے استعمال کرنا سب سے آسان ہے۔

Copied title and URL