2013-02-07 14 views
5

Próbuję czas pętli while w pętli while, całkowity czas potrzebny do wykonania i nagrać czas to zrobić, za każdym razem, pętli. Potrzebuję sposobu, aby to osiągnąć za pomocą mojego kodu, jeśli to możliwe, lub otworzyć na różne koncepcje, o których może jeszcze nie wiem.Pytań pętli czas

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

Pętla wydrukuje czas, ale jestem pewien, że nie bierze pod uwagę zagnieżdżonego czasu pętli podczas snu. Jak mogę zezwolić pythonowi na czas zarówno podczas pętli, każdej pętli, którą będzie musiał wykonać (w tym przypadku 500)?

+0

http://stackoverflow.com/questions/1557571/how-to-get-time-of-a-python-program-execution. – Greg

+0

@greg Jeśli czytasz mój kod, robię ten moduł pomiaru czasu. To, co próbuję wymyślić, jest głębsze niż podstawowy czas pełnego programu. Musi być ustawiony czasowo dla każdej pętli. – Bain

+0

Bain, mój błąd. – Greg

Odpowiedz

10

Po ustawieniu rozpocząć poza początkowym pętli jesteś gwarantującego, że jesteś uzyskiwanie niepoprawny czas potrzebny do wykonania pętli while. To tak, jakby mówiąc:

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

To dlatego, że początek pozostaje statyczna przez cały czas realizacji w czasie, gdy czas zakończenia stale wzrasta wraz z upływem czasu. Umieszczając czas rozpoczęcia w pętli, zwiększa się również czas rozpoczęcia programu.

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

Niesamowite, tego właśnie potrzebowałem. Jakoś dostałem pomieszanie mojego czasu. Dziękuję za tę koncepcję. – Bain

1

prawo pomysł, ale miejsce docelowe funkcji czasu jest odrobinę off, ja skorygować je tutaj:

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