Formation incluse

Gestion des taches asynchrones avec Celery, Redis et Django: Un exemple pratique

Angel Watio
25 Octobre 2024 · 6,63 min lecture
2
Django
Gestion des taches asynchrones avec Celery, Redis et Django: Un exemple pratique

INTRODUCTION

Les applications web modernes nécessitent souvent des traitements longs et complexes, tels que l'envoi de courriels, la compression d'images ou la mise à jour de données en temps réel. Cependant, ces opérations peuvent ralentir considérablement les performances de votre application. C'est là que Celery et Redis entrent en jeu. Dans cet article, nous allons explorer comment utiliser Celery et Redis avec Django pour créer une application scalable et performante.

DÉFINITION

Celery est une bibliothèque de gestion de tâches asynchrones et de files d'attente dans Python, couramment utilisée avec Django pour exécuter des tâches en arrière-plan.

Redis est un magasin de données en mémoire, souvent utilisé comme broker avec Celery pour la file d'attente des tâches.

PROBLÉMATIQUE

Imaginez que vous gérez un magasin en ligne avec des produits et chaque produit a une date de péremption. Vous souhaitez automatiquement mettre à jour le statut des produits lorsqu'ils atteignent leur date de péremption. Comment pouvez-vous réaliser cela sans ralentir les performances de votre système ?

SOLUTION

Nous allons créer une application Django utilisant Celery et Redis pour gérer la désactivation automatique des dates de péremption des produits.

  • Créez le dossier devant contenir le projet Django et s'y positionner
  • Créez l'environnement virtuel et l'activé
  • Installer Django et ses dépendances
  • Créer le projet Django

django-admin startproject gestion_produits

  •  Créer l'application Django

python manage.py startapp produits

  • Installer les dépendances

pip install celery redis

  • Configurer Celery et Redis

Créez le fichier celery.py dans le dossier gestion_produits :

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gestion_produits.settings')

app = Celery('gestion_produits')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

  • Créer le modèle Produit

Dans produits/models.py :
from django.db import models

class Produit(models.Model):
    nom = models.CharField(max_length=255)
    description = models.TextField()
    date_peremption = models.DateField()
    is_visible = models.BooleanField(default=True)

  • Créer la tâche Celery dans un fichier nommé tasks.py

Dans produits/tasks.py :

from celery import shared_task
from .models import Produit
from django.utils import timezone

@shared_task
def verifier_date_peremption():
    produits = Produit.objects.filter(date_peremption = timezone.now(), is_visible=True)
    produits.update(is_visible = False)

  • Configurer la planification de la tâche

Dans settings.py:

CELERY_BEAT_SCHEDULE = {
    'verifier_date_peremption': {
        'task': 'produits.tasks.verifier_date_peremption',
        'schedule': '0 0 * * *',  # Toutes les nuits à minuit
    },
}

  • Lancer le projet

Ouvrer deux fenetres du terminal et lancer ces commandes dans chacun des deux:

python manage.py runserver //Lancer le server

celery -A gestion_produits worker --loglevel=info //Lancer celery

CONCLUSION

Dans cet article, nous avons vu comment utiliser Celery et Redis avec Django pour créer une application scalable et performante. Nous avons créé une application de gestion de produits avec une date de péremption et configuré une tâche Celery pour mettre à jour automatiquement le statut des produits. Cette approche peut être appliquée à de nombreux autres cas d'utilisation.

AVANTAGES

  • Amélioration des performances
  • Scalabilité
  • Flexibilité

PERSPECTIVES

  • Utiliser Celery et Redis pour d'autres tâches longues
  • Intégrer d'autres outils de gestion de tâches

 

2

Applaudissez pour montrer votre soutien

Angel Watio

0 Suivez-nous · Rédacteur pour Django