Inhaltsverzeichnis
- Verwendung von
time.time()
- Verwendung von
time.process_time()
- Verwendung von
time.perf_counter()
- Verwendung von
time.monotonic()
Pythons time
-Modul bietet verschiedene Funktionen zur Messung der verstrichenen Zeit, jede mit eigenen Stärken und Schwächen. Die optimale Wahl hängt von der jeweiligen Anwendung und der benötigten Genauigkeit ab. Dieser Artikel verdeutlicht die Unterschiede zwischen vier wichtigen Timer-Funktionen: time.time()
, time.process_time()
, time.perf_counter()
und time.monotonic()
.
Verwendung von time.time()
time.time()
gibt die aktuelle Systemzeit als Gleitkommazahl zurück, die die Sekunden seit der Epochzeit (normalerweise 1. Januar 1970, 00:00:00 UTC) darstellt. Dies ist eine „Wall-Clock“-Zeit, die anfällig für Änderungen durch Systemzeitanpassungen (z. B. NTP-Synchronisierung) ist. Daher ist sie nicht für präzise Zeitmessungen geeignet.
import time
start_zeit = time.time()
# ... ein zu messender Codeabschnitt ...
end_zeit = time.time()
verstrichene_zeit = end_zeit - start_zeit
print(f"Verstrichene Zeit: {verstrichene_zeit:.4f} Sekunden")
Verwenden Sie time.time()
für Anwendungen, die nur eine grobe Schätzung der verstrichenen Zeit benötigen, z. B. zum Protokollieren der Start- und Endzeiten eines Prozesses.
Verwendung von time.process_time()
time.process_time()
misst die Summe der System- und Benutzer-CPU-Zeit des aktuellen Prozesses, ohne die Zeit, die mit Schlafen oder Warten auf E/A verbracht wird. Es ist ideal zum Benchmarking von CPU-gebundenen Operationen und liefert ein zuverlässiges Maß für die verbrauchte CPU-Zeit. Es ist nicht von Systemzeituhränderungen betroffen und stellt keine Wall-Clock-Zeit dar.
import time
start_zeit = time.process_time()
# ... CPU-gebundener Code ...
end_zeit = time.process_time()
verstrichene_zeit = end_zeit - start_zeit
print(f"Verstrichene Prozesszeit: {verstrichene_zeit:.4f} Sekunden")
Diese Funktion eignet sich am besten zur Beurteilung des Rechenaufwands eines Programms, unabhängig von externen Faktoren.
Verwendung von time.perf_counter()
time.perf_counter()
liefert einen hoch auflösenden Performance-Counter-Wert mit der höchstmöglichen Genauigkeit. Er ist perfekt zum Benchmarking von Code, bei dem Genauigkeit von größter Bedeutung ist. Wie time.process_time()
ist er nicht von Systemzeituhränderungen betroffen, aber im Gegensatz zu time.process_time()
beinhaltet er die Zeit, die mit Schlafen oder Warten verbracht wird.
import time
start_zeit = time.perf_counter()
# ... ein präzise zu messender Codeabschnitt ...
end_zeit = time.perf_counter()
verstrichene_zeit = end_zeit - start_zeit
print(f"Verstrichene Performance-Counter-Zeit: {verstrichene_zeit:.6f} Sekunden")
Verwenden Sie time.perf_counter()
für Mikro-Benchmarks und Anwendungen, die extrem genaue Zeitmessungen erfordern, unabhängig von Systemzeituhränderungen.
Verwendung von time.monotonic()
time.monotonic()
gibt einen monoton steigenden Zählerwert zurück. Der Wert steigt immer und wird niemals verringert, auch nicht bei Systemzeituhränderungen. Er ist unerlässlich für die Messung der verstrichenen Zeit, wenn ein immer steigender Zeitwert garantiert werden muss, unabhängig von äußeren Einflüssen. Er steht nicht in direktem Zusammenhang mit der Wall-Clock- oder CPU-Zeit.
import time
start_zeit = time.monotonic()
# ... ein Codeabschnitt ...
end_zeit = time.monotonic()
verstrichene_zeit = end_zeit - start_zeit
print(f"Verstrichene monotone Zeit: {verstrichene_zeit:.4f} Sekunden")
Diese Funktion ist wichtig in Szenarien, in denen Zeituhränderungen zu ungenauen Zeitmessungen führen könnten, z. B. bei Game-Loops oder Fortschrittsbalken.
Zusammenfassend lässt sich sagen, dass die Auswahl der geeigneten Timer-Funktion vollständig von den Anforderungen der jeweiligen Anwendung abhängt. Für allgemeine Zeitmessungen kann time.time()
ausreichen. Für CPU-gebundene Aufgaben wird time.process_time()
empfohlen. Für hochpräzise Messungen ist time.perf_counter()
ideal. Schließlich stellt time.monotonic()
monoton steigende Zeitwerte sicher, was entscheidend ist, wenn Zeituhränderungen ein Problem darstellen.