Ich habe einige Fragen zu den neuen Funktionen time.perf_counter()
und time.process_time()
.
Für die erstere aus der Dokumentation:
Gibt den Wert (in Sekundenbruchteilen) eines Leistungsindikators zurück, dh eine Uhr mit der höchsten verfügbaren Auflösung , um eine kurze Dauer zu messen. Es enthält die im Schlaf verstrichene Zeit und ist systemweit. Der Referenzpunkt des zurückgegebenen Werts ist undefiniert, sodass nur die Differenz zwischen den Ergebnissen aufeinanderfolgender Aufrufe gültig ist.
Ist diese "höchste Auflösung" auf allen Systemen gleich? Oder hängt es immer etwas davon ab, ob wir zum Beispiel Linux oder Windows verwenden?
Die Frage ergibt sich aus der Tatsache time.time()
, dass in der Dokumentation steht, dass "nicht alle Systeme Zeit mit einer besseren Genauigkeit als 1 Sekunde liefern". Wie können sie jetzt eine bessere und höhere Auflösung bieten?
Über letzteres time.process_time()
:
Gibt den Wert (in Bruchteilen von Sekunden) der Summe der System- und Benutzer-CPU-Zeit des aktuellen Prozesses zurück. Die im Schlaf verstrichene Zeit ist nicht enthalten. Es ist per Definition prozessweit. Der Referenzpunkt des zurückgegebenen Werts ist undefiniert, sodass nur die Differenz zwischen den Ergebnissen aufeinanderfolgender Aufrufe gültig ist.
Ich verstehe nicht, was sind diese "Systemzeit" und "Benutzer-CPU-Zeit"? Was ist der Unterschied?
quelle
duck
Zeit als Funktion zu verwenden, anstatt sie zu implementieren. Dh verwendentime.time()
odertime.monotonic()
je nachdem, was Sie wollen.time.clock
und summiert werdentime.process_time
, untergeordnete Prozesse jedoch nicht. Siehe auch diese Diskussion über Präzision (variiert natürlich je nach System).Antworten:
In diesem Zusammenhang gibt es zwei verschiedene Arten von "Zeit": absolute Zeit und relative Zeit.
Absolute Zeit ist die "reale Zeit", die von zurückgegeben wird
time.time()
und mit der wir alle zu tun haben. Sie wird normalerweise ab einem festgelegten Zeitpunkt in der Vergangenheit (z. B. der UNIX-Epoche von 00:00:00 UTC am 01.01.1970) mit einer Auflösung von mindestens 1 Sekunde gemessen. Moderne Systeme bieten normalerweise eine Auflösung von Milli- oder Mikrosekunden. Es wird von der dedizierten Hardware auf den meisten Computern gewartet. Die RTC-Schaltung (Real-Time Clock) ist normalerweise batteriebetrieben, sodass das System die Echtzeit zwischen den Einschaltungen verfolgt. Diese "Echtzeit" unterliegt auch Änderungen, die auf Ihrem Standort (Zeitzonen) und Ihrer Jahreszeit (Sommerzeit) basieren oder als Offset von UTC (auch als GMT- oder Zulu-Zeit bezeichnet) ausgedrückt werden.Zweitens gibt es eine relative Zeit, die von
time.perf_counter
und zurückgegeben wirdtime.process_time
. Diese Art von Zeit hat keine definierte Beziehung zur realen Zeit in dem Sinne, dass die Beziehung system- und implementierungsspezifisch ist. Es kann nur zum Messen von Zeitintervallen verwendet werden, dh eines Wertes ohne Einheit, der proportional zu der zwischen zwei Zeitpunkten verstrichenen Zeit ist. Dies wird hauptsächlich verwendet, um die relative Leistung zu bewerten (z. B. ob diese Codeversion schneller als diese Codeversion ausgeführt wird).Auf modernen Systemen wird es unter Verwendung eines CPU-Zählers gemessen, der bei einer Frequenz, die sich auf den Hardware-Takt der CPU bezieht, monoton erhöht wird. Die Zählerauflösung hängt stark von der Hardware des Systems ab. Der Wert kann in den meisten Fällen nicht zuverlässig mit der Echtzeit in Beziehung gesetzt oder sogar zwischen Systemen verglichen werden. Darüber hinaus wird der Zählerwert jedes Mal zurückgesetzt, wenn die CPU eingeschaltet oder zurückgesetzt wird.
time.perf_counter
Gibt den absoluten Wert des Zählers zurück.time.process_time
ist ein Wert, der vom CPU-Zähler abgeleitet, aber nur aktualisiert wird, wenn ein bestimmter Prozess auf der CPU ausgeführt wird, und in "Benutzerzeit", dh die Zeit, in der der Prozess selbst auf der CPU ausgeführt wird, und "System" unterteilt werden kann time ', dies ist die Zeit, zu der der Betriebssystemkernel im Auftrag des Prozesses auf der CPU ausgeführt wird.quelle