पायथन मानक पुस्तकालय के टाइमिट मॉड्यूल का उपयोग करके, आप अपने कोड में किसी प्रक्रिया के निष्पादन समय को आसानी से माप सकते हैं। यह त्वरित जांच के लिए उपयोगी है।
निम्नलिखित दो मामलों पर यहां चर्चा की जाएगी।
- एक पायथन फ़ाइल में मापें:
timeit.timeit()
,timeit.repeat()
- जुपिटर नोटबुक के साथ मापन:
%timeit
,%%timeit
दूसरा तरीका प्रोग्राम में बीता हुआ समय मापने के लिए time.time() का उपयोग करना है।
पायथन फाइलों में मापन: 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() फ़ंक्शन में मापना चाहते हैं, तो इसे 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]
जुपिटर नोटबुक के साथ मापन:%timeit, %%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 लिखना है, इसलिए इसका उपयोग करना सबसे आसान है।