2013-02-07 8 views
5

Sto provando a passare un ciclo while in un ciclo while, il tempo totale necessario per l'esecuzione e registrare il tempo necessario per farlo, ogni volta che lo loop. Ho bisogno di un modo per raggiungere questo obiettivo usando il mio codice, se possibile, o aperto a concetti diversi che potrei non sapere ancora.Tempo un po 'di ciclo python

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

Il ciclo stamperà un orario, ma sono certo che non tenga conto del tempo di riposo del ciclo durante l'annidamento. Come posso permettere a python di passare il tempo sia durante i loop, sia in ogni loop che dovrà fare (in questo caso 500)?

+0

http://stackoverflow.com/questions/1557571/how-to-get-tempo-di-un-python-programma di esecuzione. – Greg

+0

@greg Se leggete il mio codice, sto facendo questo modulo di temporizzazione. Quello che sto cercando di capire è più profondo del tempismo di base del programma completo. Deve essere cronometrato per ogni ciclo. – Bain

+0

Bain, mio ​​errore. – Greg

risposta

10

Quando si imposta iniziare al di fuori del ciclo iniziale si sta garantendo che si stanno ottenendo il tempo non corretto necessario per l'esecuzione del ciclo while. Sarebbe come dire:

program_starts = time.time() 
while(True): 
    now = time.time() 
    print("It has been {0} seconds since the loop started".format(now - program_starts)) 

Questo perché inizio rimane statico per tutto il tempo di esecuzione, mentre il tempo finale è in costante aumento con il passare del tempo. Inserendo l'ora di inizio all'interno del ciclo, si assicura che anche l'ora di inizio aumenti con l'esecuzione del programma.

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) 
+0

Impressionante questo è ciò di cui avevo bisogno. In qualche modo ho incasinato il mio inserimento nel tempo. Grazie per questo concetto. – Bain

1

idea giusta, ma il posizionamento delle funzioni di temporizzazione è un pochino fuori, ho corretto qui:

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