2017-01-17 4 views
0

Ich habe eine Funktion, die Schleifen und ich möchte messen, wie lange es dauert, eine Umdrehung einschließlich der Zeit zu durchlaufen, die ich mit tkinter hinzugefügt habe. Ich habe diese Zeilen am Ende meiner Looping-Funktion hinzugefügt.Wie fps (verstrichene Zeit) mit tkinter python.after messen?

Ich würde erwarten, die Menge der Zeit Änderung basierend auf dem .after Wert zu sehen, aber unabhängig davon, ob ich es auf 25 oder 5025 setze, bekomme ich die gleichen grundlegenden Ergebnisse. Ich experimentierte auch damit, die Anweisung time2= ganz am Anfang der Schleife zu setzen und dann auch die Positionen print und time2= zu tauschen.

Ich bekomme leicht unterschiedliche Ergebnisse mit verschiedenen Positionen, aber keine von ihnen scheint die hinzugefügte Zeit des .after Wertes zu zeigen, obwohl ich klar sehen kann (basierend auf dem Rest des Codes), dass die Zeit hinzugefügt wird.

Also habe ich offensichtlich ein "Messung" -Problem. Gibt es ein kritisches Stück Wissen, das ich nicht verstehe?

import time 

def get_elapsed_time() 
    startTime = time.time() 
    my_loop() 
    endTime = time.time() 

    elapsedTime = endTime - startTime 
    print elapsedTime 

time.time() stellt den Verlauf der Zeit seit der Epoche Linux, die 1:

print time.clock() - time2[0]  
time2[0] = time.clock()  
root.after(5025, myloop) 
+1

messen Sie die Zeit bevor "nachher" ausgeführt wird und bevor 'Myloop' ausgeführt wird, so dass Sie ein falsches Ergebnis erhalten müssen. Besseres minimales Arbeitsbeispiel, weil dieser Code nicht ausreicht, um zu antworten. – furas

+0

BTW mit '5025' sollten Sie ungefähr' 1000/5025' FPS (ungefähr 0.199 FPS) bekommen, aber Sie müssen die Zeit hinzufügen, die durch den Befehl in 'myloop' verwendet wird - dh. '1000/(5025 + time_in_myloop)' FPS – furas

+1

time.clock() ist in Python 3.3 veraltet - Sie sollten process_time() verwenden Wenn Sie jedoch versuchen, eine ereignisgesteuerte abgelaufene Zeit zu erfassen, möchten Sie möglicherweise eine Delta-Zeit .time() statt, wie time.clock() und process_time() messen CPU-Zeit benötigt, um die Python-Zeile auszuführen –

Antwort

2

Basierend auf Ihren Kommentar oben, können Sie eine verstrichene Zeit Funktionalität wie so erreichen/1/1970 - lesen Sie hier mehr: https://en.wikipedia.org/wiki/Unix_time

Daher ist die obige Funktion von startTime zum „Linux Universal Time“, eine Schleife durch Ihre my_loop() Funktion am Ende gesetzt wird welche es setzen wird endTime auf die "Linux Universal Time". Der Unterschied zwischen endTime und startTime repräsentiert den Zeitverlauf zwischen dem Aufruf der Funktion get_elapsed_time() und dem Ende der Funktion, die Mikrosekunden nach dem Ende Ihrer my_loop()-Funktion vergangen ist. Effektiv wird dadurch die Zeit gedruckt, die Ihre my_loop()-Funktion ausgeführt wurde.

+0

Dies setzt voraus, dass my_loop() die Funktion ist, auf die Sie sich beziehen, die Zeit braucht –

+0

Sie schlagen also vor, eine separate Funktion zu verwenden, um die Messung durchzuführen? Ich gebe das einen Versuch, obwohl die Funktion, die ich versuche zu messen, Schleife sein muss und ich möchte eine laufende Zahl davon behalten, wie lange jede Schleife dauert, um zu bewerten, welche Elemente die meiste Zeit hinzufügen. Es wäre schwierig, verschiedene Dinge einzeln zu messen. Aber ich bin wirklich neugierig darauf, warum der Ansatz, den ich gemacht habe, überhaupt nicht funktioniert hat. – chmedly

Verwandte Themen