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 » ?

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 » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 05:13:01687parcourir

How to Implement a Recurring Function with 'threading.Timer' Without the 'RuntimeError: threads can only be started once' Issue?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn