Messung der verstrichenen Zeit in Python
Gibt es eine einfache Möglichkeit /Modul richtig Messen Sie die verstrichene Zeit in python? Ich weiß, dass ich Sie einfach nennen time.time()
zweimal und nehmen Sie den Unterschied, aber das ergibt falsche Ergebnisse, wenn die Systemzeit geändert wird. Zugegeben, das passiert nicht sehr oft, aber es bedeutet, dass ich die Messung, die falsche Sache.
Mit time.time()
zur Messung von Laufzeiten ist unglaublich Kreisverkehr, wenn man darüber nachdenkt. Nehmen Sie die Differenz von zwei absoluten Messungen der Zeit, die wiederum konstruiert von Dauer-Messungen (durchgeführt durch Timer) und der bekannten absoluten Zeiten (manuell oder über einen ntp), dass Sie nicht daran interessiert sind, an alle.
So, gibt es eine Möglichkeit zur Abfrage dieser "timer-Zeit" direkt? Ich könnte mir vorstellen, dass es dargestellt werden kann, wie eine Millisekunde oder Mikrosekunde Wert, hat keine aussagekräftigen absoluten Darstellung (und somit nicht angepasst werden müssen, um mit der system-Zeit). Suchen Sie ein bisschen herum, es scheint, dass dies genau das ist, was System.nanoTime()
nicht in Java, aber ich habe nicht gefunden, eine entsprechende Python-Funktion, obwohl es sollte (hardware-technisch) einfacher zu stellen als time.time()
.
Edit: um Verwirrung Zu vermeiden und Adresse Antworten: es geht nicht um die Sommerzeit, und ich will nicht die CPU-Zeit, die entweder - ich will verstrichene physische Zeit. Es muss nicht sehr fein ist, und auch nicht besonders präzise. Es darf nur nicht, mir negative Laufzeiten oder Laufzeiten, die sind um mehrere Größenordnungen (über die Granularität), nur weil jemand beschlossen, um die system-clock auf einen anderen Wert. Hier ist, was die Python docs sagen, über Zeit.Zeit()':
Dies ist genau das, was ich vermeiden möchte, da es kann dazu führen seltsame Dinge, wie negative Werte in der Zeit-Berechnungen. Ich kann dies umgehen in dem moment, aber ich glaube, es ist eine gute Idee, um zu lernen mit den richtigen Lösungen, wo dies möglich ist, da die kludges kommen wieder zu beißen, die Sie eines Tages.
Edit2: Einige der Forschung zeigt, dass Sie ein system erhalten, Zeit, die unabhängige Messung wie ich will, im Windows mit GetTickCount64(), unter Linux können Sie es in der return-Wert der Zeit, die(). Allerdings habe ich noch nicht finden können, ein Modul stellt diese Funktion in Python.
InformationsquelleAutor der Frage Medo42 | 2011-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie scheinen zu suchen, ist eine monotonic-timer. Ein monotonic Zeit-Referenz nicht springen oder rückwärts zu gehen.
Es wurden mehrere versuche zur Umsetzung einer cross-Plattform-monotomic Uhr für Python, basierend auf dem OS-Referenz. (Windows, POSIX-und BSD sind ganz anders) Sehen, die Gespräche und einige der versuche, monotone Zeit in das SO ein post.
Meist können Sie nur mit os.times():
Aber das bedeutet nicht, füllen Sie die erforderlichen vergangene Echtzeit (der fünfte Tupel) auf Windows.
Wenn Sie mit Windows-Unterstützung, betrachten
ctypes
und Sie können aufrufen, GetTickCount64() direkt, wie schon in dieses Rezept.InformationsquelleAutor der Antwort the wolf
Zur Messung verstrichene CPU-Zeit, Blick auf Zeit.Uhr(). Dies ist das äquivalent von Linux times() Benutzer Uhrzeit-Feld.
Für das benchmarking verwenden timeit.
Den datetime-Moduldas ist Teil von Python 2.3+auch hat Mikrosekunde Zeit, wenn von der Plattform unterstützten.
Beispiel:
Wenn Sie sind besorgt über ein system mit der Zeit ändert (von DS -> ST), aktivieren Sie das zurückgegebene Objekt von datetime.Vermutlich die system Zeit hätte eine kleine Korrektur von einem NTP Referenz Einstellung. Dies sollte slew beeinflussteund Korrekturen sind allmählich angewandtaber ntp-sync beats kann eine Wirkung haben, die mit sehr kleinen (millisec oder microsec) Zeit Verweise.
Können Sie auch auf Alex Martelli die C-Funktion wenn Sie möchten, dass etwas von dieser Auflösung. Ich würde nicht zu weit gehen, das Rad neu zu erfinden. Die genaue Uhrzeit ist grundlegend, und die meisten modernen Betriebssysteme machen einen ziemlich guten job.
Bearbeiten
Basierend auf Ihrem Klarstellungen, es klingt wie Sie brauchen eine einfache Seite überprüfen, ob die system-Uhr hat sich geändert. Vergleichen Sie einfach zu einem freundlichen, lokalen ntp-server:
NTP, mit einer Genauigkeit von Millisekunden über das Internet und hat Vertretungen Auflösung von Auflösung von 2-32 Sekunden (233 Pikosekunden). Sollte gut genug sein?
Sich bewusst sein, dass der NTP-64-bit-Datenstruktur ein überlauf in 2036 und alle 136 Jahre danach -- wenn Sie wirklich wollen, eine robuste Lösung, besser überprüfen Sie für den überlauf...
InformationsquelleAutor der Antwort
Python 3.3 Hinzugefügt eine monotonic-timer in der standard-Bibliothek, die genau das tut, was ich suchte. Dank Paddy3118 für den Hinweis in "Wie bekomme ich monotone Dauer in python?".
InformationsquelleAutor der Antwort Medo42
Verwendung der UTC vermeidet diese peinliche Periode, wenn die Uhr verschiebt sich aufgrund der Sommerzeit.
Als für die Verwendung einer alternativen Methode, anstatt Subtraktion von zwei Uhren, bewusst sein, dass das OS tatsächlich enthalten eine Uhr, die initialisiert wird, die von einem hardware-Uhr im PC. Moderne OS-Implementierungen wird auch halten, dass die Uhr synchronisiert mit einigen offiziellen Quelle, so dass es nicht treiben. Dies ist viel genauer als jede Intervall-timer den PC laufen könnte.
InformationsquelleAutor der Antwort Mark Ransom
Beispiel Funktionen, die Sie in Ihrer Bearbeitung sind zwei völlig verschiedene Dinge:
os.times()
.Obwohl zwei verschiedene Funktionen, beide (möglicherweise) genutzt werden könnten, um zu offenbaren ein system Uhr, hatte ein "Bäuerchen" mit den Methoden:
Erste:
Könnten Sie nehmen sowohl eine system-Zeit mit
time.time()
und eine CPU-Zeit mittime.clock()
. Da Wanduhr Zeit IMMER größer oder gleich der CPU-Zeit, verwerfen Sie alle Messungen, bei denen das Intervall zwischen den beidentime.time()
Lesungen weniger als die gepaarttime.clock()
überprüfen Lesungen.Beispiel:
Zweite:
Erste system-uptime ist auch vielversprechend, wenn Sie sind besorgt über das system der Uhr, da ein Benutzer zurücksetzen nicht zurücksetzen der Betriebszeit Anzahl der Teilstriche in den meisten Fällen. (dass ich mir bewusst bin...)
Jetzt die schwierigere Frage: immer system uptime in eine Plattform-unabhängige Art und Weise-insbesondere ohne laichen eine neue shell -- in der sub-Sekunde Genauigkeit. Hmmm...
Wahrscheinlich die beste Wette ist psutil. Durchsuchen Sie die Quelleverwenden Sie
uptime = GetTickCount() /1000.00f;
für Windows undsysctl "kern.boottime"
für BSD /OS X, etc. Leider sind diese alle 1 Sekunde Auflösung.InformationsquelleAutor der Antwort
InformationsquelleAutor der Antwort msudder