2011-01-18 1 views

Répondre

8

Au lieu de vérifier le temps sur chaque boucle, vous pouvez utiliser un objet Timer

import time 
from threading import Timer 

def timeout_handler(timeout=10): 
    print time.time() 
    timer = Timer(timeout, timeout_handler) 
    timer.start() 

timeout_handler() 
while True: 
    print "loop" 
    time.sleep(1) 
+1

+1 Beaucoup plus agréable que ma réponse, j'adore que le python ait de telles piles. – fmark

1

Il existe un moyen très pratique de faire cela en utilisant time.asctime(). Vous stockez le asctime avant d'entrer dans la boucle while et quelque part dans la boucle elle-même. Calculez la différence de temps entre l'heure enregistrée et l'heure actuelle et si cette différence est de 10 secondes, mettez à jour l'heure enregistrée à l'heure actuelle et imprimez qu'elle a été exécutée.

Cependant, c'est une manière très hacky de le faire car il nécessite des calculs tordus et ennuyeux.

Si votre objectif est de vérifier l'exécution d'un algorithme spécifique, alors vous êtes mieux à l'aide du module timeit

Hope this helps

2

Comme il est indiqué, cela est un peu un hack méchant , car cela implique de vérifier l'heure à chaque itération. Pour que cela fonctionne, vous devez avoir des tâches qui s'exécutent pendant un petit pourcentage du délai d'attente - si votre boucle n'effectue que des itérations toutes les minutes, elle ne sera pas imprimée toutes les dix secondes. Si vous voulez être interrompu, vous pourriez considérer le multithreading, ou de préférence si vous êtes sous linux/mac/unix, les signaux. Quelle est votre plateforme?

import time 

timeout = 10 
first_time = time.time() 
last_time = first_time 
while(True): 
    pass #do something here 
    new_time = time.time() 
    if new_time - last_time > timeout: 
     last_time = new_time 
     print "Its been %f seconds" % (new_time - first_time) 

Sortie:

Its been 10.016000 seconds 
Its been 20.031000 seconds 
Its been 30.047000 seconds 
+0

OHMYGOSH je vous aime, mais qu'est-ce que 'pass' faire? est-ce que je mets quelque chose à la place? – tekknolagi

+1

'pass' est l'opération nulle, c'est juste un espace réservé et ne fait rien du tout ([vraiment] (http://docs.python.org/reference/simple_stmts.html#pass)). Il suffit de le remplacer par votre propre code. – fmark

+1

Hmm, je ne connaissais pas l'objet 'Timer', je vous recommande de passer à l'utiliser dans la réponse ci-dessous. – fmark

Questions connexes