Skip to content

Ausführungszeit mit timeit in Python messen

Python

In Python können Sie die Ausführungszeit einfach mit dem timeit-Modul der Standardbibliothek messen.

Dieser Artikel zwei konkrete Fälle:

  • Messen Sie die Ausführungszeit im Python-Skript:timeit.timeit(), timeit.repeat()
  • Ausführungszeit im Jupyter Notebook Messenger:%timeit, %%timeit

Messen Sie die Ausführungszeit im Python-Skript:timeit.timeit(), timeit.repeat()

Definieren Sie als Beispiel einen einfachen Funktionstest (n), der die Summe von n auf fortlaufenden Zahlen berechnet und messen Sie dessen Ausführungszeit.

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

Indem SIE den zu messenden Code als String an timeit.timeit() übergeben, wird Ihr Code mehrfach ausgeführt und seine Ausführungszeit zurückgegeben.

Der Standardwert von Zahl ist 1.000.000. Beachten Sie, dass es lange dauert, wenn Sie zeitaufwändigen Code mit dem Standardwert ausführen.

Der Code WIRD im globalen Namespace ausgeführt, dafür globals() an globals übergeben WIRD. Ohne sie würde im Beispiel der Funktionstest und sterben Variable n nicht erkannt.

Der Code kann anstelle einer Zeichenfolge ein aufrufbares Objekt sein, sodass SIE ihn auch mit einem Lambda-Ausdruck ohne Argumente angeben können. In diesem Fall ist es nicht erforderlich, das Global-Argument anzugeben.

result = timeit.timeit(lambda: test(n), number=loop)
print(result / loop)
# 0.00027574066299712287

timeit.timeit() gibt einfach die Zeit (in Sekunden) zurück, die benötigt wurde, um den Code mehrfach auszuführen.

Im Beispiel Beispiel WIRD sterben Zeit pro Ausführung gemessen, INDEM SIE DURCH sterben Anzahl der Ausführungen (Anzahl) dividiert WIRD. Wenn Sie nicht dividieren, erhöht sich der Wert des Ergebnisses einfach, wenn die Anzahl der Läufe zunimmt.

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() kann verwendet werden, um timeit() zu wiederholen. Das Ergebnis wird als Liste zurückgegeben.

repeat = 5
print(timeit.repeat(lambda: test(n), repeat=repeat, number=100))
# [0.044914519996382296, 0.039663890027441084, 0.02868645201670006, 0.022745631984435022, 0.023260265996214002]

Ausführungszeit im Jupyter Notebook Messenger:%timeit, %%timeit

In Jupyter Notebook (IPython) können SIE die magischen Befehle %timeit und %%timeit verwenden, um die Ausführungszeit Ihres Codes zu messen. Es ist nicht notwendig, das timeit-Modul zu importieren.

%time it

Geben SIE für %timeit den Zielcode nach %timeit mit einem Leerzeichen an.

Standardmäßig werden Anzahl und Wiederholung in timeit.timeit() automatisch gesetzt. Sie können auch mit den Optionen -n und -r angegeben werden.

Der Mittelwert und die Standardabweichung werden berechnet.

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

%%Zeit es

Sie können den magischen Befehl %%timeit verwenden, um die Ausführungszeit der Zelle zu messen.

Unterstützen Sie beispielsweise den Prozess mit NumPy ausführen. Wie bei %timeit sind -n und -r optional.

Beachten Sie, dass %%timeit die Ausführungszeit der gesamten Zelle misst, sodass das folgende Beispiel die Zeit zum Importieren von NumPy enthält.

%%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 ist der einfachste Weg, die Ausführungszeit zu messen, da Sie einfach %%timeit an den Anfang der Zelle schreiben.

Unter dem folgenden Link finden Sie ein Beispiel für ein Jupyter Notebook (.ipynb).