web-dev-qa-db-fra.com

Boucle temporelle python

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)?

11
Bain

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)
14
Greg

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
1
Saurabh

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()
1
hd1

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)
1
Farouk Yahaya