Zeitmessung?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Zeitmessung?

Beitragvon blubber » Donnerstag 12. April 2007, 13:36

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ß
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 12. April 2007, 13:56

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.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Beitragvon blubber » Donnerstag 12. April 2007, 14:03

Jo, hab jetzt time.time() durch time.clock() ersetzt und bekomm "exakte" Messungen von ungefähr 0.15ms

Gruß
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Donnerstag 12. April 2007, 15:10

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
TUFKAB – the user formerly known as blackbird
lunar

Beitragvon lunar » Donnerstag 12. April 2007, 15:15

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... ;)
lunar

Beitragvon lunar » Donnerstag 12. April 2007, 15:20

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?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Donnerstag 12. April 2007, 16:53

Eben time.time(). Das ist es auch, was timeit verwendet: für Windows clock(), für den Rest time().
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

Beitragvon lunar » Donnerstag 12. April 2007, 18:48

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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Donnerstag 12. April 2007, 19:00

Warum nicht gleich timeit?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

Beitragvon blubber » Freitag 13. April 2007, 07:12

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder