1766 Stimmen

Wie ermittle ich den Zeitpunkt der Ausführung eines Python-Programms?

Ich habe ein Kommandozeilenprogramm in Python, das eine Weile braucht, bis es fertig ist. Ich möchte die genaue Zeit wissen, die es braucht, um die Ausführung zu beenden.

Ich habe mir die timeit Modul, aber es scheint nur für kleine Codeschnipsel geeignet zu sein. Ich möchte die Zeit für das gesamte Programm messen.

34voto

Matt Punkte 4280

Für die Datenleute, die Jupyter-Notebook

In einer Zelle können Sie die Jupyter-Funktion %%time magischen Befehl, um die Ausführungszeit zu messen:

%%time
[ x**2 for x in range(10000)]

Ausgabe

CPU times: user 4.54 ms, sys: 0 ns, total: 4.54 ms
Wall time: 4.12 ms

Damit wird nur die Ausführungszeit einer bestimmten Zelle erfasst. Wenn Sie die Ausführungszeit des gesamten Notizbuchs (d. h. des Programms) erfassen möchten, können Sie ein neues Notizbuch im selben Verzeichnis erstellen und in dem neuen Notizbuch alle Zellen ausführen:

_Angenommen, das obige Notizbuch heißt example_notebook.ipynb . In einem neuen Notizbuch im selben Verzeichnis:_

# Convert your notebook to a .py script:
!jupyter nbconvert --to script example_notebook.ipynb

# Run the example_notebook with -t flag for time
%run -t example_notebook

Ausgabe

IPython CPU timings (estimated):
  User   :       0.00 s.
  System :       0.00 s.
Wall time:       0.00 s.

22voto

Sandeep Punkte 26349

Das folgende Snippet gibt die verstrichene Zeit in einem gut lesbaren Format aus <HH:MM:SS> Format.

import time
from datetime import timedelta

start_time = time.time()

#
# Perform lots of computations.
#

elapsed_time_secs = time.time() - start_time

msg = "Execution took: %s secs (Wall clock time)" % timedelta(seconds=round(elapsed_time_secs))

print(msg)

3 Stimmen

Ganz unten findet man die vernünftigste Antwort ("vernünftig" bedeutet, dass man sich so weit wie möglich auf eingebaute Funktionen stützt und daher am wenigsten tippen muss).

21voto

user 923227 Punkte 2252

Ähnlich wie bei der Antwort von @rogeriopvl habe ich eine leichte Modifikation hinzugefügt, um in Stunden-Minuten-Sekunden zu konvertieren, indem ich dieselbe Bibliothek für lang laufende Aufträge verwende.

import time
start_time = time.time()
main()
seconds = time.time() - start_time
print('Time Taken:', time.strftime("%H:%M:%S",time.gmtime(seconds)))

Beispielhafte Ausgabe

Time Taken: 00:00:08

0 Stimmen

Genau das, wonach ich gesucht habe! Danke!

20voto

Nikita Tonkoskur Punkte 1355

Für Funktionen schlage ich vor, diesen einfachen Dekorator zu verwenden, den ich erstellt habe.

def timeit(method):
    def timed(*args, **kwargs):
        ts = time.time()
        result = method(*args, **kwargs)
        te = time.time()
        if 'log_time' in kwargs:
            name = kwargs.get('log_name', method.__name__.upper())
            kwargs['log_time'][name] = int((te - ts) * 1000)
        else:
            print('%r  %2.22f ms' % (method.__name__, (te - ts) * 1000))
        return result
    return timed

@timeit
def foo():
    do_some_work()

# foo()
# 'foo'  0.000953 ms

0 Stimmen

1. Wie kann man den "log_name" in kwargs verwenden? 2. ist es nicht überflüssig, "get" zu verwenden? Ich meine, wenn "log_time" in kwargs dann kwargs.get('log_name',...) ist gleichbedeutend mit kwargs['log_name'] nicht wahr?

0 Stimmen

Zu kompliziert, wo ist f strings? ..

0 Stimmen

Ich mag diesen Ansatz

13voto

Qina Yan Punkte 1126
from time import time
start_time = time()
...
end_time = time()
time_taken = end_time - start_time # time_taken is in seconds
hours, rest = divmod(time_taken,3600)
minutes, seconds = divmod(rest, 60)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X