Maison >développement back-end >Tutoriel Python >Comment éviter RuntimeError lors de l'utilisation de threading.Timer en Python ?

Comment éviter RuntimeError lors de l'utilisation de threading.Timer en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 05:57:03218parcourir

How to Avoid RuntimeError When Using threading.Timer in Python?

Threading.Timer : répétition de fonctions à des intervalles spécifiés

Lorsque vous travaillez avec des threads Python, en particulier lorsque vous tentez de démarrer et d'arrêter une minuterie à plusieurs reprises, comprendre leur comportement est crucial. Un défi courant rencontré lors de l'utilisation de threading.Timer est la réception d'une RuntimeError.

L'erreur d'exécution :

La RuntimeError se produit lors de la tentative de démarrage d'un minuteur qui a déjà été démarré. . En effet, les threads, une fois démarrés, ne peuvent pas être redémarrés directement.

Solution de contournement :

Pour résoudre ce problème, envisagez d'utiliser un thread dédié pour gérer la fonction de minuterie. Voici comment vous pouvez l'aborder :

Créer un fil de discussion de minuterie :

Utilisez une classe de fil personnalisée (MyThread) qui hérite de Thread et intègre la logique du minuteur.

import threading

class MyThread(threading.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 your function here

Démarrage et arrêt du minuteur :

Dans le code qui lance le minuteur, créez un événement stopFlag et utilisez-le pour signaler quand le minuteur doit s'arrêter.

stopFlag = threading.Event()
thread = MyThread(stopFlag)
thread.start()  # Start the timer thread once
# To stop the timer, set the stopFlag event
stopFlag.set()

Avantages de cette approche :

  • Le thread du timer n'est démarré qu'une seule fois, évitant ainsi l'erreur RuntimeError.
  • La fonction timer est exécutée sur un thread séparé, l'empêchant de bloquer le thread principal.
  • Des intervalles de temps précis et cohérents sont maintenus, même lors d'un traitement lourd.

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