Lors de la création d'applications web, il y a souvent des moments où vous devez effectuer des tâches longues. Par exemple :

  • Lorsque l'utilisateur s'inscrit, vous devez envoyer un email de vérification.
  • Vous devez exécuter automatiquement une tâche de nettoyage des données tous les jours à minuit.
  • Lorsque l'utilisateur planifie une tâche, elle doit être exécutée à une heure déterminée.

Django fonctionne par défaut de manière à répondre immédiatement lorsqu'une demande est faite, donc il est nécessaire d'avoir un moyen de traiter les tâches longues de manière asynchrone. Et c'est là que Celery entre en jeu ! 🚀

Celery est un puissant outil qui vous aide à exécuter des tâches asynchrones dans Django, et Celery-Beat vous aide à exécuter des tâches spécifiques à des heures programmées.

Django Celery-Beat task scheduling illustration

1️⃣ Comment configurer des tâches planifiées avec Django-Celery-Beat

Il existe principalement deux manières de configurer des tâches planifiées avec Celery-Beat.

✅ (1) Configuration de la planification via l'interface graphique dans Django Admin

Django-Celery-Beat permet de configurer des tâches planifiées directement via l'interface graphique de Django Admin.

📌 Caractéristiques
  • Sans codage, il est possible d'exécuter des tâches périodiques simplement en configurant.
  • Dans la page d'administration Django, vous pouvez configurer et modifier des tâches périodiques via l'interface utilisateur.
  • Cependant, il s'agit d'une configuration statique, donc il est difficile de la modifier dynamiquement en fonction des demandes des utilisateurs.
📌 Dans quels cas est-il utile ?
  • Lorsque l'interaction entre l'application et l'utilisateur n'est pas nécessaire
  • Ex) Tâche d'exécution automatique de sauvegarde de données à minuit chaque jour
  • Ex) Tâche de mise à jour des données d'une API spécifique chaque lundi matin

✅ (2) Création dynamique de tâches planifiées via le code Python

Vous pouvez également créer des tâches planifiées directement via le code dans Celery-Beat.

📌 Caractéristiques
  • Il est possible de créer dynamiquement des tâches planifiées en fonction des demandes des utilisateurs.
  • Les tâches planifiées peuvent être créées, modifiées et supprimées via le code.
  • Sans passer par l'Admin, vous pouvez enregistrer directement des tâches périodiques dans la vue.
📌 Dans quels cas est-il utile ?
  • Lorsque des tâches planifiées sont nécessaires en fonction des demandes spécifiques des utilisateurs.
  • Ex) Lorsqu'un utilisateur "fait une commande réservée", enregistrement d'une tâche qui annule automatiquement après 2 heures.
  • Ex) Lorsqu'un utilisateur active la fonction "rappel par email", planification de l'envoi d'un email de rappel à une heure déterminée.

2️⃣ [Pratique] Créer une tâche planifiée avec du code Python

Étape 1 : Définir la tâche Celery

from celery import shared_task

@shared_task
def send_reminder_email(user_id):
    # Ici, implémentez la logique pour envoyer l'email
    print(f"📧 Email de rappel envoyé à l'utilisateur {user_id} !")

Étape 2 : Créer un objet PeriodicTask dans Django-Celery-Beat

from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json

# 1️⃣ Créer un intervalle d'exécution (par exemple, toutes les 10 minutes)
schedule, created = IntervalSchedule.objects.get_or_create(
    every=10,  # toutes les 10 minutes
    period=IntervalSchedule.MINUTES
)

# 2️⃣ Créer un PeriodicTask
task = PeriodicTask.objects.create(
    interval=schedule,  # intervalle d'exécution
    name="Envoyer l'email de rappel",  # nom de la tâche
    task="myapp.tasks.send_reminder_email",  # nom de la tâche Celery à exécuter
    args=json.dumps([1]),  # transmettre l'ID d'utilisateur (ici, c'est l'exemple de l'utilisateur 1)
)

🎯 Conclusion : Pour les développeurs Django, Celery est essentiel !

Celery est un outil essentiel qui permet de gérer des tâches asynchrones et de les exécuter de manière planifiée dans Django.

Particulièrement, en utilisant Celery-Beat, vous pouvez configurer des tâches périodiques et gérer dynamiquement la planification en fonction d'événements spécifiques.

📌 En résumé :

  1. Django-Celery-Beat est un outil puissant pour exécuter des tâches planifiées.
  2. Avec Django Admin (GUI), il est facile de configurer des tâches périodiques.
  3. En créant des tâches avec du code Python, vous pouvez gérer dynamiquement les tâches planifiées en fonction des demandes des utilisateurs.
  4. Pour les développeurs Django, il est essentiel de comprendre les concepts de base de Celery et de Celery-Beat !

🔥 Prochain épisode : Annonce

Dans cet épisode, nous avons brièvement présenté comment créer des tâches planifiées avec Celery-Beat via le code. Cependant, en pratique, vous utiliserez davantage de différents champs du modèle `PeriodicTask` pour gérer des logiques complexes.

Dans le prochain épisode, nous traiterons plus en détail le code pratique pour planifier diverses tâches et le rôle de chaque champ du modèle `PeriodicTask`.

Si vous souhaitez en savoir plus sur l'utilisation approfondie de Celery, n'oubliez pas de suivre le prochain épisode ! 🚀

Et si vous voulez voir plus d'articles sur Celery sur le blog,

veuillez consulter la liste des 'articles similaires' ci-dessous ou recherchez "Celery" dans la barre de recherche en haut à droite ! 😊