Python Language
रूपरेखा
खोज…
IPython में %% समय और% timeit
रूपरेखा स्ट्रिंग अवतरण:
In [1]: import string
In [2]: %%timeit s=""; long_list=list(string.ascii_letters)*50
....: for substring in long_list:
....: s+=substring
....:
1000 loops, best of 3: 570 us per loop
In [3]: %%timeit long_list=list(string.ascii_letters)*50
....: s="".join(long_list)
....:
100000 loops, best of 3: 16.1 us per loop
पुनरावृत्तियों और सूचियों पर रूपरेखा लूप:
In [4]: %timeit for i in range(100000):pass
100 loops, best of 3: 2.82 ms per loop
In [5]: %timeit for i in list(range(100000)):pass
100 loops, best of 3: 3.95 ms per loop
timeit () फ़ंक्शन
किसी सरणी में तत्वों का दोहराव
>>> import timeit
>>> timeit.timeit('list(itertools.repeat("a", 100))', 'import itertools', number = 10000000)
10.997665435877963
>>> timeit.timeit('["a"]*100', number = 10000000)
7.118789926862576
timeit कमांड लाइन
संख्याओं का रूपरेखा तैयार करना
python -m timeit "'-'.join(str(n) for n in range(100))"
10000 loops, best of 3: 29.2 usec per loop
python -m timeit "'-'.join(map(str,range(100)))"
100000 loops, best of 3: 19.4 usec per loop
कमांड लाइन में line_profiler
जिस प्रोफाइल को हम प्रोफाइल करना चाहते हैं, उस फंक्शन से पहले @profile डायरेक्शन वाला सोर्स कोड:
import requests
@profile
def slow_func():
s = requests.session()
html=s.get("https://en.wikipedia.org/").text
sum([pow(ord(x),3.1) for x in list(html)])
for i in range(50):
slow_func()
लाइन द्वारा प्रोफाइलिंग लाइन की गणना करने के लिए kernprof कमांड का उपयोग करना
$ kernprof -lv so6.py
Wrote profile results to so6.py.lprof
Timer unit: 4.27654e-07 s
Total time: 22.6427 s
File: so6.py
Function: slow_func at line 4
Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 @profile
5 def slow_func():
6 50 20729 414.6 0.0 s = requests.session()
7 50 47618627 952372.5 89.9 html=s.get("https://en.wikipedia.org/").text
8 50 5306958 106139.2 10.0 sum([pow(ord(x),3.1) for x in list(html)])
पृष्ठ का अनुरोध पृष्ठ पर दी गई जानकारी के आधार पर किसी भी गणना से लगभग हमेशा धीमा होता है।
CProfile (पसंदीदा प्रोफाइलर) का उपयोग करना
पायथन में cProfile नामक एक प्रोफाइलर शामिल है। यह आमतौर पर timeit का उपयोग करने पर पसंद किया जाता है।
यह आपकी पूरी स्क्रिप्ट को तोड़ देता है और आपकी स्क्रिप्ट की प्रत्येक विधि के लिए यह आपको बताता है:
-
ncalls
: एक विधि को कितनी बार कहा गया -
tottime
: दिए गए फ़ंक्शन में कुल समय व्यतीत (उप-कार्यों के लिए कॉल में किए गए समय को छोड़कर) -
percall
: प्रति कॉल समय व्यतीत होता है। या एनसीएल द्वारा विभाजित योग के भागफल -
cumtime
समय: इसमें और सभी उप-क्षेत्रों (बाहर निकलने तक के आह्वान) में संचयी समय व्यतीत होता है। यह आंकड़ा पुनरावर्ती कार्यों के लिए भी सटीक है। -
percall
: आदिम कॉल द्वारा विभाजित सह-काल का भागफल है -
filename:lineno(function)
: प्रत्येक फ़ंक्शन का संबंधित डेटा प्रदान करता है
CProfiler का उपयोग करके कमांड लाइन पर आसानी से कॉल किया जा सकता है:
$ python -m cProfile main.py
विधि में लगने वाले समय के हिसाब से प्रोफाइल किए गए तरीकों की सूची को क्रमबद्ध करने के लिए:
$ python -m cProfile -s time main.py