Dans l'épisode précédent, nous avons appris la méthode fondamentale pour créer des tâches programmées dans Django-Celery-Beat via Django-Celery-Beat : Comment créer des tâches programmées.
📌 Cliquez sur le titre pour consulter le précédent post !
Cependant, dans des projets réels, il n'est souvent pas suffisant de faire exécuter la tâche à intervalles réguliers.
- Il peut être nécessaire de restreindre l'exécution à des moments spécifiques,
- ou de changer dynamiquement la fréquence d'exécution,
- d'inactiver une tâche sous certaines conditions,
- ou de configurer l'annulation automatique de la réservation après une certaine date.
Pour faire face à ces logiques complexes, cet épisode se concentrera sur l'approfondissement du modèle PeriodicTask de Django-Celery-Beat, ainsi que l'examen de divers champs et méthodes de configuration ! 🚀
1️⃣ Configuration de PeriodicTask avec update_or_create
Dans le service réel, il est souvent plus fréquent de modifier une tâche réservée que de la laisser telle quelle après sa création.
Par conséquent, utiliser la méthode update_or_create()
est généralement plus avantageux que d'utiliser PeriodicTask.objects.create()
.
📌 En utilisant update_or_create()
,
- si la tâche existe déjà, elle sera mise à jour
- si elle n'existe pas, elle sera créée
Cela signifie que vu qu'il est possible de remplacer une tâche programmée existante par le même nom, cela peut prévenir les instances redondantes inutiles.
2️⃣ Champ PeriodicTask.interval et modèle IntervalSchedule
Le PeriodicTask
de Django-Celery-Beat permet de configurer l'intervalle d'exécution répétée via le champ interval
.
Ce champ interval
est lié au modèle IntervalSchedule
, donc il faut d'abord créer une instance IntervalSchedule
avant de l'utiliser dans le PeriodicTask
.
En d'autres termes, pour enregistrer une tâche programmée :
- D'abord, créer une instance
IntervalSchedule
- Ensuite, connecter le
IntervalSchedule
créé àPeriodicTask
3️⃣ Options du champ IntervalSchedule
Nom du champ | Description | Exemples de valeurs |
---|---|---|
every |
Valeur numérique du cycle de répétition | 10 , 30 , 2 |
period |
Unité du cycle de répétition | IntervalSchedule.SECONDS , IntervalSchedule.MINUTES , IntervalSchedule.HOURS , IntervalSchedule.DAYS |
4️⃣ Exemple de configuration de PeriodicTask utilisant update_or_create
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json
# Création de l'IntervalSchedule (exécute toutes les 10 minutes)
schedule, created = IntervalSchedule.objects.get_or_create(
every=10,
period=IntervalSchedule.MINUTES
)
# Création ou mise à jour de PeriodicTask
task, created = PeriodicTask.objects.update_or_create(
name="send_reminder_email",
defaults={
"interval": schedule,
"task": "myapp.tasks.send_reminder_email",
"args": json.dumps([1]),
"enabled": True,
}
)
5️⃣ Description d'autres champs de PeriodicTask
Nom du champ | Description | Exemple |
---|---|---|
name |
Nom unique de la tâche | "send_report_task" |
interval |
Intervalle d'exécution (IntervalSchedule réf) |
schedule |
crontab |
Pour exécuter à des moments spécifiques (CrontabSchedule réf) |
None |
clocked |
Exécuter une fois à un moment spécifique (ClockedSchedule réf) |
None |
task |
Tâche Celery à exécuter | "myapp.tasks.send_report" |
args |
Arguments à passer à la fonction (JSON format) | json.dumps([123, "email@example.com"]) |
kwargs |
Arguments clés à passer à la fonction (JSON format) | json.dumps({"priority": "high"}) |
enabled |
Statut d'exécution | True ou False |
one_off |
Exécute une seule fois et stoppe | True ou False |
📌 En configurant one_off=True
, la tâche sera désactivée après son exécution une fois, mais ne sera pas supprimée.
📌 En utilisant le champ clocked
, vous pouvez planifier une tâche pour s'exécuter exactement à un moment spécifique.
🎯 Conclusion : Utilisez update_or_create
pour gérer les tâches programmées de manière flexible !
📌 En utilisant update_or_create()
lors de l'enregistrement de tâches programmées dans Django-Celery-Beat, vous pouvez facilement modifier des tâches existantes.
📌 Le champ PeriodicTask.interval
faisant référence à IntervalSchedule
, il faut d'abord créer une instance IntervalSchedule
avant de l'associer.
📌 Pour gérer des tâches programmées complexes, il est plus flexible d'utiliser des champs tels que args
, kwargs
, enabled
, one_off
, et clocked
.
🔥 Annonce du prochain épisode
Dans cet épisode, nous avons examiné comment créer et modifier PeriodicTask de manière plus flexible.
Dans le prochain épisode, nous allons traiter la configuration de tâches programmées exécutées à des moments spécifiques avec Crontab, ainsi que celles exécutées une seule fois à une heure fixe avec Clocked.
Si vous souhaitez en savoir plus sur l'utilisation approfondie de Celery, restez à l'écoute pour le prochain épisode ! 🚀
Et si vous désirez lire d'autres articles liés à Celery sur le blog,
n'hésitez pas à chercher "Celery" dans la liste des 'articles similaires' ci-dessous ou dans la barre de recherche en haut à droite ! 😊
Add a New Comment