Classe Timer dans le module Threading en Python

Vaibhav Vaibhav 23 janvier 2022
Classe Timer dans le module Threading en Python

Le threading est la technique consistant à exécuter plusieurs threads simultanément pour obtenir le parallélisme. En Python, on peut implémenter le threading à l’aide du module threading. Maintenant, le module threading a une classe Timer, qui peut être utilisée pour effectuer une action ou exécuter du code après un laps de temps x. Dans cet article, nous allons voir comment utiliser cette classe et mieux la comprendre à l’aide d’un exemple. Nous allons construire une minuterie infinie.

La classe threading.Timer en Python

La classe Timer est une sous-classe de la classe Thread et peut être utilisée pour exécuter du code après quelques unités de temps. Il accepte deux arguments, à savoir interval et function. interval fait référence au nombre de secondes après lesquelles le code doit être exécuté, et function est la fonction de rappel qui doit être appelée lorsque le temps requis s’est écoulé. Cette classe a deux fonctions importantes, à savoir start() et cancel(). La méthode start() est utilisée pour démarrer le chronomètre et la méthode cancel() est utilisée pour l’annuler.

Les objets Timer ne démarrent pas par défaut. Il faut appeler la méthode start() pour les lancer. Et pour arrêter un chronomètre en cours d’exécution, nous pouvons utiliser la méthode cancel().

Maintenant que nous avons terminé avec la théorie, comprenons comment nous pouvons pratiquement utiliser cette classe pour créer un minuteur infini. Reportez-vous au code suivant pour la même chose.

from time import sleep
from threading import Timer
from datetime import datetime


class MyInfiniteTimer:
    """
    A Thread that executes infinitely
    """

    def __init__(self, t, hFunction):
        self.t = t
        self.hFunction = hFunction
        self.thread = Timer(self.t, self.handle_function)

    def handle_function(self):
        self.hFunction()
        self.thread = Timer(self.t, self.handle_function)
        self.thread.start()

    def start(self):
        self.thread = Timer(self.t, self.handle_function)
        self.thread.start()

    def cancel(self):
        self.thread.cancel()


def print_current_datetime():
    print(datetime.today())


t = MyInfiniteTimer(1, print_current_datetime)
t.start()
sleep(5)
t.cancel()
sleep(5)
t.start()
sleep(5)
t.cancel()

Production :

2021-10-31 05:51:20.754663
2021-10-31 05:51:21.755083
2021-10-31 05:51:22.755459
2021-10-31 05:51:23.755838
2021-10-31 05:51:24.756172
2021-10-31 05:51:30.764942
2021-10-31 05:51:31.765281
2021-10-31 05:51:32.765605
2021-10-31 05:51:33.766017
2021-10-31 05:51:34.766357

Comme on peut le voir, la classe MyInfiniteTimer utilise la classe Timer. Il accepte deux arguments : t et hFunction, qui font référence au nombre de secondes et à la fonction de rappel de l’objet Timer. Lorsqu’un objet de classe MyInfiniteTimer est créé, le constructeur de la classe crée un nouvel objet timer mais ne le démarre pas. Le timer peut être lancé à l’aide de la méthode start() de la classe MyInfiniteTimer. Et en utilisant la méthode stop(), le chronomètre peut être arrêté. Une fois le timer en cours terminé, le gestionnaire ou le handle_function() crée un nouveau timer avec les mêmes configurations que le timer précédent et le démarre.

Pour présenter le fonctionnement de la classe MyInfiniteTimer, nous avons d’abord créé un nouvel objet de classe MyInfiniteTimer à la ligne 29 puis appelé la méthode start(). Ensuite, nous avons attendu 5 secondes ou laissé le chronomètre fonctionner pendant 5 secondes. Ensuite, nous avons arrêté le chronomètre et avons de nouveau attendu 5 secondes. Enfin, nous avons répété les deux derniers processus, puis le programme s’est terminé.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Article connexe - Python Threading