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
Libérer: 2024-11-12 05:13:01
original
748 Les gens l'ont consulté

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()
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal