पायथन स्टँडर्ड लायब्ररीचे टाइमइट मॉड्यूल वापरून, तुम्ही तुमच्या कोडमधील प्रक्रियेच्या अंमलबजावणीची वेळ सहजपणे मोजू शकता. हे द्रुत तपासणीसाठी उपयुक्त आहे.
पुढील दोन प्रकरणांची येथे चर्चा केली जाईल.
- पायथन फाइलमध्ये मोजा:
timeit.timeit()
,timeit.repeat()
- ज्युपिटर नोटबुकसह मोजमाप:
%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 आहे. लक्षात ठेवा की जर तुम्ही वेळ घेणार्या प्रक्रियेसाठी डीफॉल्ट मूल्य वापरत असाल, तर यास बराच वेळ लागेल.
आर्ग्युमेंट ग्लोबल म्हणून globals() पास करून, कोड जागतिक नेमस्पेसमध्ये कार्यान्वित केला जाईल.
याशिवाय, फंक्शन टेस्ट आणि व्हेरिएबल 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]
ज्युपिटर नोटबुकसह मोजमाप:%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 संपूर्ण सेलचा प्रोसेसिंग वेळ मोजण्यासाठी वापरला जाऊ शकतो.
उदाहरण म्हणून, 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 लिहायचे आहे, त्यामुळे ते वापरणे सर्वात सोपे आहे.