1. Configuration d'une tâche simple
Commençons par un exemple tout simple : comment faire pour que notre code nous rappelle chaque jour de vérifier nos emails.
import schedule
import time
def job():
print("Rappel : vérifiez vos emails !")
# Configuration de la tâche pour un lancement quotidien
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
Dans cet exemple, la fonction job sera appelée tous les jours à 9h du matin. La bibliothèque schedule vérifie s'il y a des tâches planifiées toutes les secondes à l'aide de run_pending(). N'oubliez pas que votre code doit fonctionner en permanence pour que la tâche soit exécutée.
Notes pour les hackers cool
Notez que vous pouvez utiliser every().hour pour exécuter une tâche chaque heure, ou every(2).hours pour l'exécuter toutes les deux heures. Les possibilités sont quasiment infinies.
2. Rappels en semaine
Maintenant, compliquons un peu les choses : disons que vous avez besoin d'un rappel uniquement en semaine. Par exemple, chaque jour ouvrable, nous voulons recevoir le même rappel.
import schedule
import time
def weekday_job():
print("Rappel de travail : n'oubliez pas de préparer le rapport !")
schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)
while True:
schedule.run_pending()
time.sleep(1)
Dans ce cas, chaque matin de la semaine à 8h, un rappel vous sera envoyé pour préparer le rapport. Ainsi, votre script suivra toujours le planning, même si vous l'oubliez.
3. Configuration des tâches hebdomadaires
Que faire si vous voulez recevoir un rappel chaque dimanche ? Par exemple, vous voulez vérifier vos stocks de café avant la semaine de travail. Voyons comment faire :
import schedule
import time
def sunday_job():
print("Rappel : vérifiez vos stocks de café pour la semaine prochaine !")
schedule.every().sunday.at("18:00").do(sunday_job)
while True:
schedule.run_pending()
time.sleep(1)
Ce petit morceau de code apportera un peu d'organisation à votre dimanche en vous rappelant de vous préparer pour la semaine à venir. Ainsi, votre café ne manquera jamais au moment le plus inattendu. Oui, je sais, cela peut être une tragédie pour beaucoup.
4. Modification des tâches
Suppression des tâches du planning
Si vous devez annuler l'exécution d'une tâche, vous pouvez utiliser la méthode cancel_job(). Par exemple, pour supprimer une tâche du planning, récupérez l'objet tâche et appelez cancel_job() dessus.
job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job) # Suppression de la tâche du planning
Déplacer une tâche
Pour modifier l'heure d'exécution d'une tâche, vous pouvez réattribuer son planning. Par exemple, si une tâche était planifiée à 9h, mais doit maintenant être déplacée à 10h, vous pouvez réécrire son planning.
# Planifier une tâche tous les jours à 9h
job = schedule.every().day.at("09:00").do(my_task)
# Déplacer la tâche à 10h
job.clear() # Supprimer l'ancien planning de la tâche
job.at("10:00") # La replanifier à une nouvelle heure
Vérification des tâches actives
Pour savoir s'il existe des tâches planifiées, vous pouvez afficher une liste de toutes les tâches actives avec schedule.jobs. Cela est utile lorsque vous devez obtenir des informations sur toutes les tâches présentes dans le planning.
# Ajouter plusieurs tâches
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)
# Voir toutes les tâches actives
for job in schedule.jobs:
print("Tâche :", job)
Supprimer toutes les tâches du planning
Si vous avez besoin de nettoyer le planning et de supprimer toutes les tâches planifiées, utilisez la méthode clear().
# Planifier plusieurs tâches
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)
# Nettoyer le planning
schedule.clear()
Exécution d'une tâche une seule fois
Parfois, il est nécessaire d'exécuter une tâche une seule fois à une heure donnée. Après l'exécution d'une telle tâche, vous pouvez utiliser la méthode schedule.cancel_job(job) pour l'annuler.
def one_time_task():
print("Tâche exécutée une fois")
return schedule.CancelJob # Annulation de la tâche après son exécution
# Planifier l'exécution de la tâche une fois
schedule.every().day.at("09:00").do(one_time_task)
while True:
schedule.run_pending()
time.sleep(1)
5. Scénarios d'utilisation réelle
Et maintenant plus sérieusement : comment ces automatismes peuvent-ils être intégrés dans un cadre professionnel ? Dans la vie réelle, vous pouvez utiliser la planification des tâches pour :
- Collecter automatiquement des données chaque jour ou chaque semaine.
- Créer et envoyer des rapports à un jour et une heure spécifiques.
- Surveiller l'état de votre serveur ou interface web avec des notifications d'erreurs.
- Lancer des backups réguliers de base de données.
Erreurs typiques
Lorsque vous planifiez des tâches, faites attention aux désynchronisations de temps, par exemple si votre serveur et votre ordinateur local sont dans des fuseaux horaires différents. De plus, si votre script se termine par accident, la tâche planifiée ne sera pas exécutée. Utilisez des outils de supervision comme cron (pour les systèmes de type Unix) ou le planificateur de tâches de Windows.
Si vous oubliez accidentellement de placer time.sleep(1) à la fin de votre boucle, vous obtiendrez un processus qui utilisera le processeur en continu comme un code hyperactif. Bref, n'oubliez pas de maintenir votre script opérationnel.
GO TO FULL VERSION