2017-08-18 2 views
-2

Ich versuche, die Zeit für jede Schleife Iterationen zu berechnen. Ich habe jedoch festgestellt, dass die Zeit für die Verarbeitung (alles) bei jeder Iteration inkrementell zunimmt. Ich Rechenzeit durch folgende Befehle:Rechenzeit bei jeder Iteration

start_time = time.time() 
loop: 
    (any process) 
print (time.time() - start_time)) 
+0

Sie sollten verwenden [timeit] (https://docs.python.org/3/library/timeit.html) –

+0

@ Cory Madden ... sind sie nicht beide [dh, time.time() und timeit] das gleiche tun? – John

+0

Nur eines dieser Tools wurde für das erstellt, was Sie tun möchten. Mein Kommentar ist nicht als Antwort gedacht, nur als Anregung. –

Antwort

2

Wenn Sie die time.time Methode rufen Sie die Menge an Zeit in Sekunden zurückkehren basierend auf dem Unix-Taktsystem, im Grunde die Zeit lokal auf dem System.

Sie geben die Zeit an start_time an, Sie führen dann Ihre 10 Prozesse aus und geben die aktuelle Zeit minus start_time aus, so dass Sie im Wesentlichen herausfinden, wie lange es dauert, Ihre 10 Prozesse auszuführen.

Jetzt glaube ich, dass, was Sie versuchen zu tun ist, zu berechnen, wie lange jeder einzelne Prozess dauert, zu tun, dass Sie einige Zeilen in dem Beispielcode bewegen müssen Sie geliefert:

import time 
     for i in range(10): 
     start_time = time.time()  
     (any process) 

     print(time.time() - start_time)) 

Durch Verschieben der Zeitzuordnung in die Schleife weisen Sie die Zeit zu, zu der die Schleife beginnt, und geben dann die individuelle Zeit jeder Iteration aus, anstatt zu bestimmen, wie lange die gesamte Schleife als Ganzes dauert.

Dies würde ausgeben, wie lange jede Iteration dauert.

Bitte zögern Sie keine Fragen zu stellen!

2

Hier ist ein Beispiel, wie Sie Ihre Timings mit timeit durchführen können.

import timeit 
setup = "i = {}" 
stmt = """ 
for x in range(i): 
    3 + 3 
""" 
[timeit.timeit(stmt=stmt, setup=setup.format(i), number=100) for i in range(10)] 

dem Sie eine Liste der Zeiten jeder Schleife gibt:

[8.027901640161872e-05, 
0.00011072197230532765, 
0.00011189299402758479, 
0.00012168602552264929, 
0.00012224999954923987, 
0.0001258430420421064, 
0.00013012002455070615, 
0.00013478699838742614, 
0.000138589006382972, 
0.0001438520266674459] 
+0

Vielen Dank für das Beispiel. Nun, das führt mich zu meiner ursprünglichen Frage ... warum die Zeit für eine ähnliche Operation bei jeder Iteration zunimmt? Es begann von etwa 0,000110 ... und ging bis 0,000143 – John

+0

Ich bin mir nicht sicher, ob ich das verstehe. Wenn Sie die Operation erneut ausführen, wird sie erhöht. Wenn Sie Ihre Zähne putzen, dauert es 2 Minuten. Wenn Sie sie zweimal bürsten, dauert es 4 Minuten. Nun, um etwas genauer zu sein, könnten wir sagen, dass das Zähneputzen beim ersten Mal 3 Minuten dauert, weil wir auf die Toilette gehen, unsere Zahnbürste vorbereiten müssen usw. Aber beim zweiten Zähneputzen dauert es nur noch insgesamt 5 Minuten, weil wir schon mit der Zahnbürste in der Hand im Badezimmer waren. Deine Funktion druckt die Zeit der ganzen Schleife aus, ich bin mir nicht sicher, ob du dir dessen bewusst bist. –

+0

Danke für das Zahnbürsten-Beispiel ... es hat mich zum Lachen gebracht. Nun, wenn ich schon mit einer Zahnbürste in der Hand im Badezimmer wäre, würde es sicher weniger Zeit kosten, als auf die Toilette zu gehen und die Zahnbürste zu putzen. Ich verstehe auch, dass ich die Zeit der ganzen Schleife abhole. Aber das passiert hier nicht ... in den folgenden Iterationen nimmt die Zeit ständig zu. Sollte ich versuchen, die Speicher- oder Umgebungsvariablen am Ende jeder Schleife zu reinigen, um zu sehen, ob die Zeit jeder Instanz gleich bleibt oder weiter zunimmt? – John

Verwandte Themen