खोज…


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 


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow