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()
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
},
}
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