1. Introduction à la bibliothèque schedule
Dans cette conférence, on va apprendre à exécuter des tâches selon un planning, comme de véritables mécanismes d'horlogerie, pour que notre code fonctionne quand on le souhaite. Prépare-toi, aujourd'hui on va dompter le temps !
La bibliothèque schedule est un module léger pour lancer des fonctions à des intervalles prédéfinis. Si ton code doit s'exécuter selon un planning défini, comme collecter des données tous les jours à 6 heures du matin ou envoyer des rappels quotidiens, alors schedule est ce qu'il te faut.
Voici les principaux avantages de schedule :
- Simplicité : une interface intuitive qui est beaucoup plus facile à utiliser que les solutions standards comme
cronouthreading. - Minimalisme : pas de fonctionnalités inutiles — uniquement celles qui sont nécessaires.
- Clarté : l'utilisation d'un langage presque naturel pour définir le planning.
Installation de la bibliothèque
Pour commencer, il faut installer la bibliothèque schedule. Comme pour la plupart des bibliothèques Python, on utilise pip :
pip install schedule
Maintenant que tout est prêt, plongeons dans le monde de l'automatisation et voyons comment schedule peut améliorer ton quotidien.
Les méthodes principales de la bibliothèque schedule
La bibliothèque schedule propose des méthodes pour planifier des tâches à des moments différents ou avec des fréquences variées :
every().day.at("HH:MM")— exécute une tâche tous les jours à une heure précise.every().hour— exécute une tâche toutes les heures.every().minute— exécute une tâche toutes les minutes.every().week.at("HH:MM")— exécute une tâche chaque semaine à une heure précise.every().monday.at("HH:MM")— exécute une tâche chaque lundi à une heure précise.every(10).seconds— exécute une tâche toutes les 10 secondes (ou toute autre durée définie).
2. Configurer des tâches récurrentes
On commence par quelque chose de simple — planifier une fonction qui s'exécute toutes les heures. On va créer une fonction simple qui affiche un message de bienvenue et la planifier.
Exemple : un message toutes les heures
import schedule
import time
def say_hello():
print("Salut ! Nous travaillons dans l'automatisation horaire.")
# Lance la fonction say_hello toutes les heures
schedule.every().hour.do(say_hello)
while True:
# Exécute toutes les tâches planifiées
schedule.run_pending()
time.sleep(1)
Et voilà — ton premier script avec schedule ! Dans cet exemple, on utilise la méthode every().hour.do(say_hello) pour dire "Salut !" toutes les heures. Amusant, non ?
La commande schedule.every().hour.do(say_hello) n'exécute pas directement la fonction say_hello, mais ajoute son appel au planning. L'exécution réelle de la fonction se produira au moment prévu — elle sera appelée avec le code schedule.run_pending().
3. Configurer des intervalles plus complexes
Et si on voulait exécuter des tâches non seulement toutes les heures, mais aussi toutes les 10 minutes ou certains jours de la semaine ? schedule permet d'utiliser la plupart des expressions temporelles courantes, tout aussi facilement.
Exemple : exécuter une tâche toutes les 10 minutes
import schedule
import time
def task():
print("Cette tâche s'exécute toutes les 10 minutes.")
# Planifions l'exécution de la tâche toutes les 10 minutes
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Lance toutes les tâches planifiées
time.sleep(1)
Exemple : exécuter une tâche certains jours
Essayons maintenant de planifier une tâche qui s'exécute certains jours de la semaine, comme le lundi et le mercredi, mais uniquement à 9 heures.
import schedule
import time
def monday_wednesday_task():
print("Cette tâche s'exécute les lundis et mercredis à 9 heures.")
# Exécution de la tâche les lundis et mercredis à 9 heures
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)
while True:
schedule.run_pending()
time.sleep(1)
Comme tu le vois, schedule gère différentes expressions temporelles, y compris les jours de la semaine et les heures précises. C'est super pratique pour planifier des tâches en fonction de ton travail ou d'événements prévus.
4. Gestion des tâches avec différentes conditions temporelles
Si ton script exécute plusieurs tâches, chacune avec son propre planning, schedule gère ça facilement. Par exemple, une tâche pourrait s'exécuter chaque matin, et une autre chaque vendredi.
Exemple : combiner plusieurs tâches dans un seul script
import schedule
import time
def morning_task():
print("Bonjour ! C'est l'heure de la tâche matinale.")
def friday_task():
print("Youpi, c'est vendredi ! C'est l'heure de la tâche du vendredi.")
# Tâches matinales chaque matin à 7h30
schedule.every().day.at("07:30").do(morning_task)
# Tâches du vendredi chaque vendredi à 16h00
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Conseils pratiques et erreurs fréquentes
Quand il s'agit d'automatiser des tâches avec schedule, il y a quelques points importants à garder à l'esprit.
D'abord, souviens-toi que schedule exécute les tâches dans le thread principal. Cela signifie que si ta tâche prend du temps ou peut bloquer l'exécution d'autres tâches, il serait bon de penser à utiliser du multithreading ou des appels asynchrones pour ces tâches.
Ensuite, si ta tâche doit s'exécuter à une heure précise et que c'est critique, assure-toi que ton appareil est allumé et que le script est en cours d'exécution. schedule ne fonctionnera pas si le script est arrêté ou si l'appareil est éteint.
Enfin, une idée reçue courante est d'attendre que schedule rattrape les tâches manquées. Malheureusement, si ton script ne fonctionnait pas au moment où une tâche était censée s'exécuter, schedule ne l'exécutera pas rétroactivement.
GO TO FULL VERSION