Ich habe ein Befehlszeilenprogramm in Python, dessen Fertigstellung eine Weile dauert. Ich möchte genau wissen, wie lange es dauert, bis der Lauf beendet ist.
Ich habe mir das timeit
Modul angesehen, aber es scheint nur für kleine Codeausschnitte zu sein. Ich möchte das ganze Programm zeitlich festlegen.
round(time.time() - start_time, 2)
(oder was auch immer Sie wollen), ich habe wissenschaftliche Zahlen wie 1.24e-5 zurückbekommen.'%.2f'
stattround()
hier.Ich lege dieses
timing.py
Modul in mein eigenessite-packages
Verzeichnis und füge es einfachimport timing
oben in mein Modul ein:Ich kann auch
timing.log
aus meinem Programm heraus anrufen , wenn das Programm wichtige Phasen enthält, die ich anzeigen möchte. Durch einfaches Einschließenimport timing
werden jedoch die Start- und Endzeiten sowie die insgesamt verstrichene Zeit gedruckt. (Verzeihen Sie meine obskuresecondsToStr
Funktion, sie formatiert nur eine Gleitkommazahl von Sekunden in das Formular hh: mm: ss.sss.)Hinweis: Eine Python 3-Version des obigen Codes finden Sie hier oder hier .
quelle
from functools import reduce
oben hinzu und setzen Sie Klammern um jede print-Anweisung. Funktioniert super!Unter Linux oder Unix:
In Windows finden Sie diese StackOverflow-Frage: Wie messe ich die Ausführungszeit eines Befehls in der Windows-Befehlszeile?
Für eine ausführlichere Ausgabe,
quelle
secondsToStr()
Funktion an.Ich mag die Antwort von Paul McGuire sehr , aber ich verwende Python 3. Also für diejenigen, die interessiert sind: Hier ist eine Modifikation seiner Antwort, die mit Python 3 auf * nix funktioniert (ich stelle mir vor, unter Windows
clock()
sollte diese anstelle von verwendet werdentime()
):Wenn Sie dies nützlich finden, sollten Sie seine Antwort anstelle dieser Antwort noch abstimmen, da er den größten Teil der Arbeit erledigt hat;).
quelle
timedelta(seconds=t).total_seconds()
hilfreich.time.clock()
Gibt die Prozessorzeit zurück, mit der wir nur die von diesem Prozess verwendete Zeit berechnen können (unter Unix sowieso). In der Dokumentation heißt es: "In jedem Fall ist dies die Funktion, die zum Benchmarking von Python- oder Timing-Algorithmen verwendet werden soll."quelle
Ich mag die Ausgabe des
datetime
Moduls, bei der Zeitdelta-Objekte Tage, Stunden, Minuten usw. nach Bedarf auf lesbare Weise anzeigen.Zum Beispiel:
Beispielausgabe z
oder
Wie JF Sebastian erwähnte, kann dieser Ansatz mit der Ortszeit auf einige schwierige Fälle stoßen, daher ist es sicherer, Folgendes zu verwenden:
quelle
timedelta(seconds=time.monotonic()-start)
hier verwenden (odertime.time()
wenn das Intervall groß ist). Subtrahieren Sie keine naiven Datums- / Uhrzeitobjekte, die die Ortszeit darstellen. Ortszeit ist nicht eintönigstart_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time)
. Ich vertraue darauf, dass Sie Recht haben, aber dann müssen Sie es auch formatieren, wenn Sie zurückkommendatetime.timedelta(0, 0, 76)
. Außerdem scheint die monotone Methode nur in Python 3 hinzugefügt worden zu sein.str()
, um es "menschlich" zu machen. Ich werde die Antwort aktualisieren, danke.Sie können den Python-Profiler cProfile verwenden, um die CPU-Zeit zu messen und zusätzlich, wie viel Zeit in jeder Funktion verbracht wird und wie oft jede Funktion aufgerufen wird. Dies ist sehr nützlich, wenn Sie die Leistung Ihres Skripts verbessern möchten, ohne zu wissen, wo Sie anfangen sollen. Diese Antwort auf eine andere Frage zum Stapelüberlauf ist ziemlich gut. Es ist immer gut, auch in der Dokumentation nachzuschauen.
Hier ist ein Beispiel für das Profilieren eines Skripts mit cProfile über eine Befehlszeile:
quelle
X function calls in Y CPU seconds
. Wenn Sie eine Wanduhrzeit wünschen, verwenden Sie hier eine der anderen Antworten.Noch besser für Linux:
time
quelle
Zeit Uhr()
time.perf_counter ()
time.process_time ()
quelle
Verwenden Sie einfach das
timeit
Modul. Es funktioniert sowohl mit Python 2 als auch mit Python 3.Es kehrt in Sekunden zurück und Sie können Ihre Ausführungszeit haben. Es ist einfach, aber Sie sollten diese in die Hauptfunktion schreiben, die die Programmausführung startet. Wenn Sie die Ausführungszeit auch dann erhalten möchten, wenn Sie einen Fehler erhalten, nehmen Sie Ihren Parameter "Start" und berechnen Sie dort wie folgt:
quelle
finally
Teil sein?Das folgende Snippet druckt die verstrichene Zeit in einem für Menschen lesbaren
<HH:MM:SS>
Format.quelle
quelle
In IPython "timeit" jedes Skript:
quelle
Es führt die
your_module.main()
Funktion einmal aus und druckt die verstrichene Zeit mit dertime.time()
Funktion als Timer.Informationen zum Emulieren
/usr/bin/time
in Python finden Sie unter Python-Unterprozess mit / usr / bin / time: Wie werden Timing-Informationen erfasst, aber alle anderen Ausgaben ignoriert? .Um die CPU-Zeit
time.sleep()
für jede Funktion zu messen (z. B. keine Zeit während ), können Sie das folgendeprofile
Modul verwenden (cProfile
unter Python 2):Sie können an
-p
dentimeit
obigen Befehl übergeben, wenn Sie denselben Timerprofile
verwenden möchten, den das Modul verwendet.Siehe Wie können Sie ein Python-Skript profilieren?
quelle
Ich mochte auch die Antwort von Paul McGuire und fand ein Kontextmanager-Formular, das meinen Bedürfnissen besser entsprach.
quelle
Für die Datenleute, die Jupyter Notebook verwenden
In einer Zelle können Sie den
%%time
magischen Befehl von Jupyter verwenden , um die Ausführungszeit zu messen:Ausgabe
Dadurch wird nur die Ausführungszeit einer bestimmten Zelle erfasst. Wenn Sie die Ausführungszeit des gesamten Notizbuchs (dh des Programms) erfassen möchten, können Sie ein neues Notizbuch im selben Verzeichnis erstellen und im neuen Notizbuch alle Zellen ausführen:
Angenommen, das obige Notizbuch heißt
example_notebook.ipynb
. In einem neuen Notizbuch im selben Verzeichnis:Ausgabe
quelle
Es gibt ein
timeit
Modul, mit dem die Ausführungszeiten von Python-Code zeitlich festgelegt werden können.Es enthält eine detaillierte Dokumentation und Beispiele in der Python-Dokumentation, 26.6. timeit - Misst die Ausführungszeit kleiner Codefragmente .
quelle
timeit
in der Frage. Die Frage ist, wie es hier verwendet werden kann (oder sollte es hier verwendet werden und welche Alternativen es gibt). Hier ist eine mögliche Antwort .Verwenden Sie line_profiler .
line_profiler gibt die Zeit an, die einzelne Codezeilen für die Ausführung benötigen. Der Profiler wird in C über Cython implementiert , um den Aufwand für die Profilerstellung zu verringern.
Die Ergebnisse werden sein:
quelle
Ich habe eine sehr einfache Funktion verwendet, um einen Teil der Codeausführung zeitlich zu steuern:
Um es zu verwenden, rufen Sie es einfach vor dem Code auf, um zu messen, um das Funktions-Timing abzurufen, und rufen Sie dann die Funktion nach dem Code mit Kommentaren auf. Die Uhrzeit wird vor den Kommentaren angezeigt. Zum Beispiel:
Dann sieht die Ausgabe folgendermaßen aus:
quelle
Ich hatte an vielen Stellen das gleiche Problem, deshalb habe ich ein Convenience-Paket erstellt
horology
. Sie können es mit installierenpip install horology
und dann auf elegante Weise ausführen:wird ausgegeben:
Oder noch einfacher (wenn Sie eine Funktion haben):
wird ausgegeben:
Es kümmert sich um Einheiten und Rundungen. Es funktioniert mit Python 3.6 oder neuer.
quelle
main.interval
.Dies ist Paul McGuires Antwort , die für mich funktioniert. Nur für den Fall, dass jemand Probleme hat, diesen zu betreiben.
Rufen
timing.main()
Sie nach dem Importieren der Datei Ihr Programm auf.quelle
Timeit ist eine Klasse in Python, mit der die Ausführungszeit kleiner Codeblöcke berechnet wird.
Default_timer ist eine Methode in dieser Klasse, mit der das Timing der Wanduhr und nicht die Ausführungszeit der CPU gemessen wird. Daher kann eine andere Prozessausführung dies stören. Daher ist es nützlich für kleine Codeblöcke.
Ein Beispiel für den Code lautet wie folgt:
quelle
timeit
ist die bessere Antwort IMO für viele Fälle.Spätere Antwort, aber ich benutze
timeit
:code_to_test
.number
Argument gibt an, wie oft der Code wiederholt werden soll.quelle
Die Zeit der Ausführungsmaßnahme eines Python-Programms kann inkonsistent sein, abhängig von:
Dies liegt daran, dass der effektivste Weg darin besteht, die "Reihenfolge des Wachstums" zu verwenden und die große "O" -Notation zu lernen , um dies richtig zu tun.
Auf jeden Fall können Sie versuchen, die Leistung eines Python-Programms in bestimmten Maschinenzählschritten pro Sekunde mithilfe dieses einfachen Algorithmus zu bewerten : Passen Sie dies an das Programm an, das Sie bewerten möchten
quelle
Sie tun dies einfach in Python. Es ist nicht nötig, es kompliziert zu machen.
quelle
Ähnlich wie bei der Antwort von @rogeriopvl habe ich eine geringfügige Änderung hinzugefügt, um mit derselben Bibliothek für lange laufende Jobs in Stunden-Minuten-Sekunden zu konvertieren.
Beispielausgabe
quelle
Installieren Sie zunächst ein menschenfreundliches Paket, indem Sie die Eingabeaufforderung (CMD) als Administrator öffnen und dort Folgendes eingeben :
pip install humanfriendly
Code:
Ausgabe:
quelle
Um die aktualisierte Antwort von metakermit für Python 2.7 verwenden zu können, benötigen Sie die monotone Paket.
Der Code wäre dann wie folgt:
quelle
Ich habe versucht, Zeitunterschied mit den folgenden Skripten zu finden.
quelle
Wenn Sie die Zeit in Mikrosekunden messen möchten, können Sie die folgende Version verwenden, die vollständig auf den Antworten von Paul McGuire und Nicojo basiert - es ist Python 3-Code. Ich habe auch etwas Farbe hinzugefügt:
log () => Funktion, die die Timing-Informationen ausgibt.
txt ==> erstes zu protokollierendes Argument und seine Zeichenfolge zum Markieren des Timings.
atexit ==> Python-Modul zum Registrieren von Funktionen, die Sie beim Beenden des Programms aufrufen können.
quelle