Python - Planification des Threads
Bonjour à tous, futurs maîtres Python !aujourd'hui, nous plongeons dans le monde fascinant de la planification des threads en Python. Ne vous inquiétez pas si vous êtes nouveau en programmation ; je vais vous guider étape par étape dans ce voyage, tout comme je l'ai fait pour d'innombrables étudiants au fil des années. Embarquons ensemble dans cette aventure passionnante !
Comprendre les Threads
Avant de plonger dans la planification, récapitulons rapidement ce qu'est un thread. Imaginez que vous lisez un livre tout en écoutant de la musique. Votre cerveau exécute essentiellement deux "threads" simultanément - l'un pour la lecture et l'autre pour l'écoute. En programmation, les threads fonctionnent de manière similaire, permettant à un programme d'effectuer plusieurs tâches.concurrentement.
Planification des Threads à l'aide de la Classe Timer
Maintenant, explorons notre première méthode de planification des threads : la classe Timer. C'est comme régler une alarme pour votre code !
Qu'est-ce que la Classe Timer ?
La classe Timer fait partie du module threading
de Python. Elle vous permet de planifier l'exécution d'une fonction après un délai spécifié. Pensez-y comme à un moyen de dire à Python, "Eh, exécute cette tâche pour moi, mais attend un peu avant de commencer !"
Comment Utiliser la Classe Timer
Regardons un exemple simple :
import threading
import time
def saluer(nom):
print(f"Bonjour, {nom} ! L'heure est {time.strftime('%H:%M:%S')}")
# Créer un objet Timer
t = threading.Timer(5, saluer, args=["Alice"])
# Démarrer le minuteur
t.start()
print("Minuteur démarré !")
# Attendre que le minuteur termine
t.join()
print("Minuteur terminé !")
Analysons cela :
- Nous importons les modules nécessaires :
threading
ettime
. - Nous définissons une simple fonction
saluer
qui imprime un message de salutation avec l'heure actuelle. - Nous créons un objet Timer, en disant qu'il doit exécuter la fonction
saluer
après un délai de 5 secondes, en passant "Alice" comme argument. - Nous démarrons le minuteur avec
t.start()
. - Nous utilisons
t.join()
pour attendre que le minuteur termine avant de passer à la suite.
Lorsque vous exécutez cela, vous verrez "Minuteur démarré !" imprimé immédiatement, puis après une pause de 5 secondes, vous verrez le message de salutation, suivi de "Minuteur terminé !".
Annulation d'un Minuteur
Parfois, vous pouvez avoir besoin d'annuler une tâche planifiée. C'est comme décider que vous n'avez pas besoin de cette alarme après tout. Voici comment :
import threading
import time
def tâche():
print("Cette tâche ne s'exécutera pas !")
t = threading.Timer(5, tâche)
t.start()
print("Minuteur démarré, mais nous allons l'annuler...")
time.sleep(2) # Attendre 2 secondes
t.cancel() # Annuler le minuteur
print("Minuteur annulé !")
Dans cet exemple, nous planifions une tâche mais l'annulons avant qu'elle ne puisse s'exécuter.
Planification des Threads à l'aide du Module sched
Maintenant, augmentons le niveau et examinons le module sched
. Si la classe Timer est comme une simple alarme, le module sched
est comme une application de planification complète !
Qu'est-ce que le Module sched ?
Le module sched
vous permet de planifier plusieurs événements pour qu'ils se produisent à des moments spécifiques. Il est parfait lorsque vous avez besoin de planification plus complexe qu'un simple délai.
Comment Utiliser le Module sched
Regardons un exemple :
import sched
import time
# Créer un objet planificateur
s = sched.scheduler(time.time, time.sleep)
def imprimer_temps(nom):
print(f"Bonjour, {nom} ! L'heure est {time.strftime('%H:%M:%S')}")
# Planifier quelques événements
s.enter(2, 1, imprimer_temps, argument=("Alice",))
s.enter(4, 2, imprimer_temps, argument=("Bob",))
s.enter(6, 3, imprimer_temps, argument=("Charlie",))
print("Planificateur en cours de démarrage !")
s.run()
print("Planificateur terminé !")
Analysons cela :
- Nous créons un objet planificateur en utilisant
sched.scheduler()
. - Nous définissons une simple fonction
imprimer_temps
. - Nous planifions trois événements en utilisant
s.enter()
:
- Le premier argument est le délai en secondes.
- Le second est la priorité (les nombres plus petits = priorité plus élevée).
- Le troisième est la fonction à exécuter.
- Le mot-clé
argument
permet de passer des arguments à la fonction.
- Nous démarrons le planificateur avec
s.run()
.
Lorsque vous exécutez cela, vous verrez des messages de salutation imprimés à des intervalles de 2 secondes.
Annulation des Événements Planifiés
tout comme avec le Minuteur, vous pouvez annuler des événements planifiés dans sched
:
import sched
import time
s = sched.scheduler(time.time, time.sleep)
def tâche(nom):
print(f"Bonjour, {nom} !")
événement1 = s.enter(2, 1, tâche, argument=("Alice",))
événement2 = s.enter(4, 1, tâche, argument=("Bob",))
print("Événements planifiés. Annulation de l'événement de Bob...")
s.cancel(événement2)
s.run()
print("Planificateur terminé !")
Dans cet exemple, nous planifions deux événements mais annulons le second avant de démarrer le planificateur.
Comparaison de Timer et sched
Voici une comparaison rapide des deux méthodes que nous avons apprises :
Fonctionnalité | Timer | sched |
---|---|---|
Facilité d'utilisation | Simple, direct | Plus complexe, mais plus puissant |
Événements multiples | Un à la fois | Peut planifier plusieurs événements |
Précision | Moins précis | Plus précis |
Annulation | Peut annuler avant l'exécution | Peut annuler à tout moment |
Cas d'utilisation | Délais simples | Besoins de planification complexes |
Conclusion
Et voilà, mes amis ! Nous avons exploré le monde de la planification des threads en Python, de la simple classe Timer à la complexité du module sched. Rappelez-vous, comme apprendre à骑 un vélo, maîtriser ces concepts prend de la pratique. Alors n'hésitez pas à expérimenter et à faire des erreurs - c'est ainsi que nous apprenons !
Au fil des années, j'ai vu des étudiants passer de débutants complets à des pros en Python, et je n'ai aucune doute que vous pouvez faire de même. Continuez à coder, à apprendre, et surtout, amusez-vous bien !
À la prochaine fois, bon codage !
Credits: Image by storyset