Votre exemple actuel se heurte à la question des limites de récursion, en raison de la façon dont il appelle lui-même de manière récursive. La taille de la pile continue de croître et de croître jusqu'à atteindre la valeur par défaut de 1000, très probablement. Voir cet exemple modifié:
import time
import inspect
import thread
tx1 = time.time()
def loop(event):
print "Stack size: %d" % len(inspect.stack())
tx2 = time.time()
if tx2-tx1 > 0.7:
print "Running code."
return loop(1)
thread.start_new_thread(loop, (1,))
time.sleep(60)
## OUTPUT ##
Stack size: 1
Running code.
Stack size: 2
Running code.
...
Stack size: 999
Running code.
Exception RuntimeError: 'maximum recursion depth exceeded in ...
Son probablement plus facile d'utiliser une classe personnalisée de fil qui peut fonctionner jusqu'à ce que vous lui dites d'arrêter. De cette façon, la taille de la pile ne continue pas à augmenter. Il boucle juste et appelle votre fonction de gestionnaire. Voici un exemple complet de travail:
import time
from threading import Thread
class IntervalTimer(Thread):
def __init__(self, secs, func, args=(), kwargs={}):
super(IntervalTimer, self).__init__(target=func, args=args, kwargs=kwargs)
self.__interval = secs
self.__func = func
self.__args = args
self.__kwargs = kwargs
self.__exiting = False
def run(self):
while not self.__exiting:
time.sleep(self.__interval)
self.__func(*self.__args, **self.__kwargs)
def cancel(self):
self.__exiting = True
def test(val):
print val
if __name__ == "__main__":
t = IntervalTimer(2, test, args=("Hi",))
t.start()
time.sleep(10)
t.cancel()
Cela peut vous aider: http://stackoverflow.com/questions/156330/get-timer-ticks-in-python – GoingTharn
Vous essayez d'atteindre une minuterie retardée? Dans cet exemple, une fois que le temps dépasse 0,7, il exécutera constamment votre code répétitif, jusqu'à ce que vous ayez de nouveau touché la valeur tx1, qui devra être protégée car sa mémoire partagée – jdi
@jdi juste une minuterie qui après le millisecondes fait le répétitif fonctions – Pella86