Seite 1 von 1

Zeitmessung?

Verfasst: Donnerstag 12. April 2007, 13:36
von blubber
Hi,

möchte zwischen 2 Zeitpunkten die Differenz messen und anzeigen. Nachdem ich hier im Forum rumgesucht hab, hatte ich mich für time.time() entschieden. Nun ist aber mein Problem, dass zu 90% als Zeitdifferenz 0.0 herauskommt. Ok, zwischen meinen beiden Messungen liegt zwar nur ein Befehl, aber allein die "Abarbeitung" müsste doch ein paar ms in Anspruch nehmen!?
Na jedenfalls sieht es grob so aus:

Code: Alles auswählen

zeit1 = time.time()
while (zeit1 + 5) > time.time(): #Warte 5 Sekunden ob Variable = 0 wird
     If Variable != 0:
           zeit2 = time.time()
           zeit_dif = (zeit2 - zeit1) * 1000 #1000 damits in ms angezeigt wird
           print "Zeitdifferenz: ", zeit_dif, "ms"
Also bis "Variable" den Wert 0 angenommen hat vergeht nicht viel Zeit, das weis ich, vielleicht 5 oder 6 ms, aber diese geringe Zeit, plus die Abarbeitsungszeit der Befehle muss er mir doch anzeigen?

Gruß

Verfasst: Donnerstag 12. April 2007, 13:56
von EyDu
Das sagt erst mal die Doku zu dem Thema:
time()
Return the time as a floating point number expressed in seconds since the epoch, in UTC. Note that even though the time is always returned as a floating point number, not all systems provide time with a better precision than 1 second. While this function normally returns non-decreasing values, it can return a lower value than a previous call if the system clock has been set back between the two calls.
Wie man sieht, muss die Zeit nicht genauer als eine Sekunde sein. Bei Windows wird AFAIK in ms-Schritten ( :shock: ) die Zeit angegeben.

Und auch die Ausführungsdauer der meisten Befehle wird deutlich unter einer Millisekunde liegen (auf halbwegs fernünftigen Rechnern) sonst wären die meisten Python-Programme mit ihren Berechnungen morgen noch nicht fertig.

Verfasst: Donnerstag 12. April 2007, 14:03
von blubber
Jo, hab jetzt time.time() durch time.clock() ersetzt und bekomm "exakte" Messungen von ungefähr 0.15ms

Gruß

Verfasst: Donnerstag 12. April 2007, 15:10
von mitsuhiko
blubber hat geschrieben:Jo, hab jetzt time.time() durch time.clock() ersetzt und bekomm "exakte" Messungen von ungefähr 0.15ms
Dafür läufts nur noch auf Windoze

Verfasst: Donnerstag 12. April 2007, 15:15
von lunar
time.time liefert den normalen System-Zeitgeber zurück. Dieser ist für die Uhrzeit und Datumsberechungen gedacht und nicht für Performance-Messung. Deswegen wird er auch nur alle paar Millisekunden aktualisiert (auf aktuellen Windows-Systeme iirc um die 50 ms). Deswegen ist time.time für genaue Zeitmessungen ungeeignet. Die richtige Funktion hast du ja bereits gefunden... ;)

Verfasst: Donnerstag 12. April 2007, 15:20
von lunar
blackbird hat geschrieben:
blubber hat geschrieben:Jo, hab jetzt time.time() durch time.clock() ersetzt und bekomm "exakte" Messungen von ungefähr 0.15ms
Dafür läufts nur noch auf Windoze
Und was nimmt man dann unter Linux? Anders gefragt, gibt es ein Equivalent zur extrem genauen QueryPerformanceCounter() Funktion unter Windows?

Verfasst: Donnerstag 12. April 2007, 16:53
von birkenfeld
Eben time.time(). Das ist es auch, was timeit verwendet: für Windows clock(), für den Rest time().

Verfasst: Donnerstag 12. April 2007, 18:48
von lunar
birkenfeld hat geschrieben:Eben time.time(). Das ist es auch, was timeit verwendet: für Windows clock(), für den Rest time().
Also am besten eine if-Abfrage?

time.time ist nämlich unter Windows nicht für Performance-Messungen zu gebrauchen.

Verfasst: Donnerstag 12. April 2007, 19:00
von birkenfeld
Warum nicht gleich timeit?

Verfasst: Freitag 13. April 2007, 07:12
von blubber
blackbird hat geschrieben:
blubber hat geschrieben:Jo, hab jetzt time.time() durch time.clock() ersetzt und bekomm "exakte" Messungen von ungefähr 0.15ms
Dafür läufts nur noch auf Windoze
Das stimmt, allerdings muss mein Programm auch nur auf Windows-Kisten laufen, von daher passt das eigentlich.

Grüße