Welches ist besser für das Timing in Python zu verwenden? time.clock () oder time.time ()? Welches bietet mehr Genauigkeit?
zum Beispiel:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
veraltet ist und die Verwendung vonperf_counter()
oderprocess_time()
stattdessen empfohlen wird .timeit.default_timer()
Leistung zu messen (es time.time zugeordnet ist () oder time.clock () je nach Betriebssystem) .time.clock
und summiert werdentime.process_time
, untergeordnete Prozesse jedoch nicht. Siehe auch diese Diskussion der Präzision (variiert natürlich je nach System).Antworten:
Ab 3.3 ist time.clock () veraltet und es wird empfohlen, stattdessen time.process_time () oder time.perf_counter () zu verwenden.
Zuvor in 2.7 laut Zeitmodul docs :
Zusätzlich gibt es das Timeit- Modul zum Benchmarking von Code-Snippets.
quelle
time.clock()
von der Plattform abhängig zu sein undtime.process_time()
ist es nicht. Dies ist der Grund, warumtime.clock()
veraltet war.Die kurze Antwort lautet: Meistens
time.clock()
wird es besser. Wenn Sie jedoch Hardware planen (z. B. einen Algorithmus, den Sie in die GPU eingefügt haben),time.clock()
wird diese Zeit entfallen und estime.time()
ist die einzige verbleibende Lösung.Hinweis: Unabhängig von der verwendeten Methode hängt das Timing von Faktoren ab, die Sie nicht steuern können (wann wechselt der Prozess, wie oft, ...). Dies ist schlimmer
time.time()
, existiert aber auch beitime.clock()
, sodass Sie niemals nur einen Timing-Test durchführen sollten. Führen Sie jedoch immer eine Reihe von Tests durch und betrachten Sie den Mittelwert / die Varianz der Zeiten.quelle
Andere : haben re beantwortet
time.time()
vs.time.clock()
.Wenn Sie jedoch die Ausführung eines Codeblocks für Benchmarking- / Profilierungszwecke planen, sollten Sie sich das
timeit
Modul ansehen .quelle
timeit.default_timer
wird dem Betriebssystem zugewiesentime.time()
odertime.clock()
hängt davon ab. Unter Python 3.3+default_timer
isttime.perf_counter()
auf allen Plattformen.Eine Sache zu beachten: Das Ändern der Systemzeit wirkt sich aus,
time.time()
aber nichttime.clock()
.Ich musste einige automatische Testausführungen steuern. Wenn ein Schritt des Testfalls mehr als eine bestimmte Zeit in Anspruch nahm, wurde dieser TC abgebrochen, um mit dem nächsten fortzufahren.
Manchmal war jedoch ein Schritt erforderlich, um die Systemzeit zu ändern (um das Scheduler-Modul der zu testenden Anwendung zu überprüfen). Nachdem die Systemzeit einige Stunden in der Zukunft eingestellt wurde, lief das TC-Zeitlimit ab und der Testfall wurde abgebrochen. Ich hatte von wechseln ,
time.time()
umtime.clock()
diese richtig zu handhaben .quelle
clock()
-> GleitkommazahlGibt die CPU-Zeit oder Echtzeit seit dem Start des Prozesses oder seit dem ersten Aufruf von zurück
clock()
. Dies ist genauso präzise wie das System aufzeichnet.time()
-> GleitkommazahlGibt die aktuelle Zeit in Sekunden seit der Epoche zurück. Sekundenbruchteile können vorhanden sein, wenn die Systemuhr sie bereitstellt.
In der Regel
time()
ist dies genauer, da Betriebssysteme die Prozesslaufzeit nicht mit der Genauigkeit speichern, mit der sie die Systemzeit speichern (dh die tatsächliche Zeit).quelle
Kommt darauf an, was dich interessiert. Wenn Sie WALL TIME (wie in, die Zeit auf der Uhr an Ihrer Wand) meinen, liefert time.clock () KEINE Genauigkeit, da es möglicherweise die CPU-Zeit verwaltet.
quelle
time.clock()
auf einem Linux-Server verwendet und die Zahlen, die ich bekam, waren definitiv keine Sekundentime()
hat eine bessere Präzision alsclock()
unter Linux.clock()
hat nur eine Genauigkeit von weniger als 10 ms. Währendtime()
gibt Präfekten Präzision. Mein Test ist auf CentOS 6.4 2. Python 2.6using clock():
quelle
Der Unterschied ist sehr plattformspezifisch.
clock () unterscheidet sich beispielsweise unter Windows erheblich von Linux.
Für die Art von Beispielen, die Sie beschreiben, möchten Sie wahrscheinlich stattdessen das Modul "timeit".
quelle
clock
ist"very different"
?Wie andere haben darauf hingewiesen ,
time.clock()
für veraltet isttime.perf_counter()
odertime.process_time()
aber Python 3.7 einleitet Nanosekunde Auflösung Timing mittime.perf_counter_ns()
,time.process_time_ns()
undtime.time_ns()
, zusammen mit drei anderen Funktionen.Diese 6 neuen Funktionen zur Auflösung von Nanosekunden sind in PEP 564 beschrieben :
Wie auch andere angemerkt haben, verwenden Sie das
timeit
Modul, um Funktionen und kleine Codefragmente zu messen.quelle
Unter Unix misst time.clock () die CPU-Zeit, die vom aktuellen Prozess verwendet wurde. Daher ist es nicht gut, die seit einem bestimmten Zeitpunkt verstrichene Zeit zu messen. Unter Windows werden die seit dem ersten Aufruf der Funktion verstrichenen Sekunden der Wanduhr gemessen. Auf beiden Systemen gibt time.time () die seit der Epoche verstrichenen Sekunden zurück.
Wenn Sie Code schreiben, der nur für Windows bestimmt ist, funktioniert beides (obwohl Sie die beiden unterschiedlich verwenden - für time.clock () ist keine Subtraktion erforderlich). Wenn dies auf einem Unix-System ausgeführt werden soll oder Sie Code wünschen, der garantiert portabel ist, sollten Sie time.time () verwenden.
quelle
Kurze Antwort: Verwenden Sie time.clock () für das Timing in Python.
Auf * nix-Systemen gibt clock () die Prozessorzeit als Gleitkommazahl in Sekunden zurück. Unter Windows werden die seit dem ersten Aufruf dieser Funktion verstrichenen Sekunden als Gleitkommazahl zurückgegeben.
time () gibt die Sekunden seit der Epoche in UTC als Gleitkommazahl zurück. Es gibt keine Garantie dafür, dass Sie eine bessere Genauigkeit als 1 Sekunde erhalten (obwohl time () eine Gleitkommazahl zurückgibt). Beachten Sie auch, dass der zweite Funktionsaufruf einen niedrigeren Wert zurückgibt, wenn die Systemuhr zwischen zwei Aufrufen dieser Funktion zurückgesetzt wurde.
quelle
Nach meinem besten Verständnis ist time.clock () so präzise, wie es Ihr System zulässt.
quelle
Ich benutze diesen Code, um 2 Methoden zu vergleichen. Mein Betriebssystem ist Windows 8, Prozessorkern i5, RAM 4 GB
Ausgabe:
time () = 0,0993799996376
clock () = 0,0993572257367
quelle
Richtige Antwort: Sie sind beide gleich lang wie ein Bruchteil.
Aber die schneller , wenn
subject
isttime
?Ein kleiner Testfall :
Ich arbeite nicht in einem Schweizer Labor, aber ich habe getestet.
Basierend auf dieser Frage:
time.clock()
ist besser alstime.time()
Bearbeiten:
time.clock()
ist ein interner Zähler, kann also nicht außerhalb verwendet werden, hat Einschränkungenmax 32BIT FLOAT
und kann nicht weiter gezählt werden, wenn nicht die ersten / letzten Werte gespeichert werden. Ein weiterer Zähler kann nicht zusammengeführt werden ...quelle
time.clock()
wurde in Python 3.8 entfernt, weil es plattformabhängiges Verhalten hatte :Unter Windows gibt diese Funktion die seit dem ersten Aufruf dieser Funktion verstrichenen Wanduhrsekunden als Gleitkommazahl zurück
Welche Funktion soll stattdessen ausgewählt werden?
Prozessorzeit : Dies ist die Zeit, die dieser bestimmte Prozess aktiv auf der CPU ausführt. Der Ruhezustand, das Warten auf eine Webanforderung oder die Zeit, in der nur andere Prozesse ausgeführt werden, tragen nicht dazu bei.
time.process_time()
Wanduhrzeit : Dies bezieht sich darauf, wie viel Zeit "auf einer an der Wand hängenden Uhr" vergangen ist, dh außerhalb der Echtzeit.
Verwenden
time.perf_counter()
time.time()
Misst auch die Wanduhrzeit, kann aber zurückgesetzt werden, sodass Sie in der Zeit zurückgehen könnentime.monotonic()
kann nicht zurückgesetzt werden (monoton = geht nur vorwärts), hat aber eine geringere Genauigkeit alstime.perf_counter()
quelle
Vergleich der Testergebnisse zwischen Ubuntu Linux und Windows 7.
Auf Ubuntu
Unter Windows 7
quelle