J'essaie de chronométrer une boucle while dans une boucle while, le temps total qu'il faut pour exécuter et d'enregistrer le temps qu'il faut pour le faire, chaque fois qu'il boucle. J'ai besoin d'un moyen d'y parvenir en utilisant mon code si possible, ou ouvert à différents concepts que je ne connais peut-être pas encore.
import random
import time
import sys
def main():
looperCPU = 500
start = time.time()
while (looperCPU != 0):
#start = time.time()
#this is the computation for 3 secs
time.sleep(3)
random_number = random.randint(0,1000)
#Send to printer for processing
#.75 secs to 4.75 secs to generate a pause before printing
secondsPause = random.uniform(.75,4.75)
#This is the printer function
printerLooper = True
while printerLooper == True :
print("Sleeping for ", secondsPause, " seconds")
print(random_number)
printerLooper = False
#
print("total time taken this loop: ", time.time() - start)
looperCPU -= 1
main()
La boucle affichera une heure, mais je suis très certain qu'elle ne prend pas en compte le temps de veille imbriqué pendant la boucle. Comment puis-je permettre à python de chronométrer les deux boucles while, chaque boucle qu'il devra faire (dans ce cas 500)?
Lorsque vous définissez start en dehors de votre boucle initiale, vous garantissez que vous obtenez le temps incorrect nécessaire à l'exécution de la boucle while. Ce serait comme dire:
program_starts = time.time()
while(True):
now = time.time()
print("It has been {0} seconds since the loop started".format(now - program_starts))
En effet, le début reste statique pendant toute la durée d'exécution tandis que votre heure de fin augmente régulièrement avec le temps. En plaçant l'heure de début dans la boucle, vous vous assurez que votre heure de début augmente également pendant l'exécution du programme.
while (looperCPU != 0):
start_time = time.time()
# Do some stuff
while printerLooper == True :
print("Sleeping for ", secondsPause, " seconds")
print(random_number)
printerLooper = False
end_time = time.time()
print("total time taken this loop: ", end_time - start_time)
Dans python vous pouvez consulter ce document https://docs.python.org/2/library/timeit.html
Exemple de Stackoverflow: Comment utiliser le module timeit
import timeit
timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
Dans le cahier Jupyter,
%%timeit -n 100
import pandas as pd
s = pd.Series([101.00, 121.00])
summary = 0
for item in s:
summary+=item
Bonne idée, mais votre placement des fonctions de synchronisation est un peu différent, je l'ai corrigé ici:
import random
import time import sys
def main():
looperCPU = 500
start = time.time()
while (looperCPU != 0):
#this is the computation for 3 secs
time.sleep(3)
random_number = random.randint(0,1000)
#Send to printer for processing
#.75 secs to 4.75 secs to generate a pause before printing
secondsPause = random.uniform(.75,4.75)
#This is the printer function
printerLooper = True
myStart = time.time()
while printerLooper == True :
print("Sleeping for ", secondsPause, " seconds")
print(random_number)
printerLooper = False
print("total time taken this loop: ", time.time() - myStart)
looperCPU -= 1
main()
Vous pouvez utiliser ce pytictoc. installer en utilisant pip ou conda. lire la documentation sur pytictoc . Il fonctionne comme des matlabs tic toc. Fondamentalement, commencez simplement la minuterie avec tic et terminez avec toc. et vous pouvez l'imprimer directement ou le stocker dans une nouvelle variable.
from pytictoc import TicToc
def main()
t = TicToc() # create instance of class
start_time= t.tic() #start timer
while ():
#end of while loop
end_time = t.toc()
print("end_time", end_time)