Maison >développement back-end >Tutoriel Python >Comment implémenter une fonction récurrente avec « threading.Timer » sans le problème « RuntimeError : les threads ne peuvent être démarrés qu'une seule fois » ?
Implémentation d'une fonction récurrente avec 'threading.Timer'
Créer une fonction qui s'exécute de manière répétée toutes les « n » secondes est une exigence courante dans programmation. Cependant, utiliser « threading.Timer » à cette fin peut présenter des défis.
Une approche consiste à démarrer un thread de minuterie plusieurs fois, comme le montre le pseudo-code ci-dessous :
t=threading.timer(0.5,function) while True: t.cancel() t.start()
Cependant, cela peut entraîner une erreur « RuntimeError : les threads ne peuvent être démarrés qu'une seule fois », car les objets « threading.Timer » ne peuvent être démarrés qu'une seule fois. Pour résoudre ce problème, nous pouvons créer une classe de thread personnalisée qui gère l'exécution répétée et l'annulation du minuteur :
class MyThread(Thread): def __init__(self, event): Thread.__init__(self) self.stopped = event def run(self): while not self.stopped.wait(0.5): print("my thread") # call a function
Dans le code principal, nous pouvons créer un événement pour contrôler le thread du minuteur :
stopFlag = Event() thread = MyThread(stopFlag) thread.start() # this will stop the timer stopFlag.set()
En utilisant cette approche, nous pouvons démarrer et arrêter la fonction récurrente selon les besoins, sans rencontrer le problème « RuntimeError ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!