Utiliser Celery dans un projet Django

Celery permet de façon simple, l’exécution de code Django en background. Un exemple simple d’utilisation est lorsque l’on permet à l’utilisateur de faire une tache qui prends plusieurs secondes à s’exécuter, celui-ci doit attendre la fin de la tâche pour que la page se charge. Et ça, c’est pas cool !
Celery va permettre d’exécuter cette tâche en backend, n’impactant pas la navigation de l’utilisateur.

Installation de django

Nous allons installer celery, sqlalchemy et aussi redis dans notre virtualenv

$ pip install celery django-celery sqlalchemy redis

Dans le dossier de votre projet, vous allez créer un fichier celery.py

# my_proj/my_proj/celery.py
from __future__ import absolute_import
 
import os
 
from celery import Celery
 
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_proj.settings')
 
from django.conf import settings
 
app = Celery('my_proj')
 
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

et dans le fichier __init__.py du dossier de votre projet

# my_proj/my_proj/__init__.py
from __future__ import absolute_import
 
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

Celery est maintenant installé dans votre projet.

Utilisation
Par convention, Celery cherche dans les dossiers des applications les fichiers tasks.py, pour trouver à l’intérieur des tâche à exécuter.
Nous allons donc créer un fichier tasks.py

from conf.celery import app
 
@app.task
def a_long_task():
    do_something_long()

Pour appeler cette tâche en backend, il suffit de faire

import tasks
tasks.a_long_task.delay()

Configuration du Broker
Le broker, c’est l’endroit ou seront enregistrées les tâches à exécuter.
Votre instance web de Django va enregistrer les tâche dans le Broker, et votre instance Celery de Django va récupérer les tâches à éxécuter dans le Broker.

La configuration se trouve dans le fichier settings.py

BROKER_URL = 'sqla+sqlite:///celerydb.sqlite'  # Utilisation de SQlite, pour du dev
BROKER_URL = 'redis://localhost:6379/0'  # Utilisation de Redis pour de la prod

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.