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

Mary-Kate Olsen
Libérer: 2024-11-16 05:57:03
original
116 Les gens l'ont consulté

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

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

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!

source:php.cn
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