Dans un précédent article, nous avons exploré comment gérer les tâches planifiées avec IntervalSchedule à travers un exemple pratique en utilisant Django-Celery-Beat : Exemple pratique de tâches planifiées avec PeriodicTask.
Cependant, dans les projets réels, le simple mode d'exécution répétée (interval) est souvent insuffisant.
- Lorsque des tâches doivent être exécutées à des moments précis chaque jour
- Lorsque des tâches doivent être exécutées une seule fois à une date et une heure spécifiques
Dans ces cas, l'utilisation de la méthode de réservation Crontab ou Clocked permet d'établir des tâches planifiées plus précises. 🚀
📌 Vous n’êtes pas familier avec le concept de Crontab ?
➡️ Comprendre correctement le `crontab` sous Linux : conseils automatiques que les développeurs adorent
Lire cet article au préalable facilitera votre compréhension ! 😊
1️⃣ Réservation à des moments spécifiques avec `CrontabSchedule`
Crontab est une méthode de planification utilisée sous Linux, ce qui permet de configurer l'exécution à des moments précis tels que secondes/minutes/heures/jours de la semaine/jours du mois.
Dans Django-Celery-Beat, vous pouvez également configurer des tâches planifiées en utilisant `CrontabSchedule` de la même manière.
📌 Exemple : tâche planifiée exécutée tous les jours à 9h30
from django_celery_beat.models import PeriodicTask, CrontabSchedule
import json
# 1️⃣ CrontabSchedule création (exécution quotidienne à 09h30)
schedule, created = CrontabSchedule.objects.get_or_create(
minute="30",
hour="9",
day_of_week="*",
day_of_month="*",
month_of_year="*"
)
# 2️⃣ Création ou mise à jour de PeriodicTask
task, created = PeriodicTask.objects.update_or_create(
name="daily_report_task",
defaults={
"crontab": schedule, # Application de CrontabSchedule
"task": "myapp.tasks.generate_daily_report",
"args": json.dumps([]),
"enabled": True,
}
)
✅ Cette configuration est réservée pour être exécutée tous les jours à 9h30 ! 🎯
✅ Description des champs de `CrontabSchedule`
Nom du champ | Description | Exemple |
---|---|---|
`minute` | Réglage des minutes d'exécution | "0", "30", "*/10" |
`hour` | Réglage des heures d'exécution | "0", "9", "*/6" |
`day_of_week` | Réglage des jours (0=dimanche) | "*"(tous les jours), `"1,3,5"`(lun/mer/ven) |
`day_of_month` | Réglage des dates d'exécution | "*"(tous les jours), `"1,15"`(1er et 15 de chaque mois) |
`month_of_year` | Réglage des mois d'exécution | "*"(chaque mois), `"1,6,12"`(janv., juin, déc.) |
2️⃣ Exécution unique à un moment précis avec `ClockedSchedule`
`ClockedSchedule` est utilisé pour définir des tâches planifiées qui s'exécutent une seule fois à une date et une heure spécifiques.
📌 Exemple : tâche exécutée une seule fois à une date spécifique (10 février 2025 à 15h00)
from django_celery_beat.models import PeriodicTask, ClockedSchedule
import json
from datetime import datetime
# 1️⃣ Création de ClockedSchedule (exécution le 10 février 2025 à 15h00)
scheduled_time = datetime(2025, 2, 10, 15, 0) # Utilisation obligatoire de l'objet datetime!
schedule, created = ClockedSchedule.objects.get_or_create(
clocked_time=scheduled_time
)
# 2️⃣ Création de PeriodicTask (définir one_off=True!)
task, created = PeriodicTask.objects.update_or_create(
name="one_time_task_20250210",
defaults={
"clocked": schedule, # Application de ClockedSchedule
"task": "myapp.tasks.one_time_email",
"args": json.dumps([]),
"enabled": True,
"one_off": True, # Désactivation automatique après exécution
}
)
✅ Cette configuration est exécutée une seule fois le 10 février 2025 à 15h00 et sera ensuite désactivée automatiquement.
- 📌 Lorsque vous créez une instance du modèle ClockedSchedule, le champ
clocked_time
doit obligatoirement être un objetdatetime
. - 📌 Utiliser des chaînes de caractères ou d'autres types de données peut provoquer des erreurs.
📌 Quelle est la relation entre ClockedSchedule et l'option one_off ?
Lorsque vous créez une tâche qui s'exécute une seule fois dans ClockedSchedule
, vous devez définir one_off=True
,
vous pourriez vous interroger sur son interaction avec le champ enabled
.
📌 Souhaitez-vous en savoir plus sur la relation entre ces deux champs (clocked_time
et one_off
) ?
➡️ Relation entre one-off et enabled dans Celery Beat : Compréhension correcte et utilisation
Dans cet article, découvrez comment one_off=True fonctionne exactement et quelles sont les différences avec enabled ! 😊
🎯 Conclusion : Crontab
et Clocked
permettent de réaliser des tâches planifiées plus élaborées !
- CrontabSchedule permet de planifier des tâches répétitives à des moments précis !
- ClockedSchedule permet de planifier des tâches qui s'exécutent une seule fois à un moment précis !
- Lors de la création de ClockedSchedule, le champ
clocked_time
doit être un objetdatetime
! - La relation entre
ClockedSchedule
et la définitionone_off=True
est traitée plus en profondeur dans un article séparé !
Si vous souhaitez en savoir plus sur l'utilisation approfondie de Celery,
consultez la liste des 'articles similaires' ci-dessous ou recherchez "Celery" dans la barre de recherche en haut à droite ! 🚀 😊
Add a New Comment