Suche…


%% Zeit und% Zeit in IPython

Profilierungs-Stringkonfiguration:

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

Profilierung von Schleifen über Iterables und Listen:

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

Funktion timeit ()

Profilwiederholung von Elementen in einem Array

>>> import timeit
>>> timeit.timeit('list(itertools.repeat("a", 100))', 'import itertools', number = 10000000)
10.997665435877963
>>> timeit.timeit('["a"]*100', number = 10000000)
7.118789926862576

timeit Befehlszeile

Profilierung von Zahlen

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 in der Befehlszeile

Der Quellcode mit der Direktive @profile vor der Funktion, für die Sie ein Profil erstellen möchten:

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()

Verwenden Sie den Befehl kernprof, um die Profilierung Zeile für Zeile zu berechnen

$ 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)])

Die Seitenanforderung ist fast immer langsamer als jede Berechnung, die auf den Informationen auf der Seite basiert.

CProfile (Preferred Profiler) verwenden

Python enthält einen Profiler namens cProfile. Dies wird im Allgemeinen der Verwendung der Zeit bevorzugt.

Es zerlegt Ihr gesamtes Skript und für jede Methode in Ihrem Skript sagt es Ihnen:

  • ncalls : ncalls an, wie oft eine Methode aufgerufen wurde
  • tottime : Gesamtzeit in der angegebenen Funktion (ohne Zeit in Aufrufen von Unterfunktionen)
  • percall : Zeit pro Anruf. Oder der Quotient von tottime geteilt durch ncalls
  • cumtime : Die kumulative Zeit in dieser und allen Unterfunktionen (vom Aufruf bis zum Beenden). Diese Zahl ist auch für rekursive Funktionen genau.
  • percall : ist der Quotient aus cumtime geteilt durch primitive Aufrufe
  • filename:lineno(function) die jeweiligen Daten jeder Funktion bereit

Der cProfiler kann einfach über die Befehlszeile aufgerufen werden:

$ python -m cProfile main.py 

So sortieren Sie die zurückgegebene Liste der Profilmethoden nach der in der Methode benötigten Zeit:

$ python -m cProfile -s time main.py 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow