Débuter avec le céleri

Installation ou configuration

Vous pouvez installer Celery via Python Package Index (PyPI) ou à partir des sources.

Pour installer la dernière version à l’aide de pip :

$ pip install celery

Pour installer à l’aide de easy_install :

$ easy_install celery

Téléchargement et installation depuis la source

Téléchargez la dernière version de Celery à partir de http://pypi.python.org/pypi/celery/

Vous pouvez l’installer en procédant comme suit :

$ tar xvfz celery-0.0.0.tar.gz
$ cd celery-0.0.0
$ python setup.py build
# python setup.py install # as root

Céleri + Redis

Installation

Des dépendances supplémentaires sont requises pour la prise en charge de Redis. Installez à la fois Celery et les dépendances en une seule fois à l’aide du bundle celery[redis] :

$ pip install -U celery[redis]

Configuration

Configurez l’emplacement de votre base de données Redis :

BROKER_URL = 'redis://localhost:6379/0'

L’URL doit être au format :

redis://:[email protected]:port/db_number

Application

Créez le fichier tâches.py :

from celery import Celery

BROKER_URL = 'redis://localhost:6379/0'
app = Celery('tasks', broker=BROKER_URL)

@app.task
def add(x, y):
    return x + y

Le premier argument de Celery est le nom du module actuel. De cette façon, les noms peuvent être générés automatiquement. Le deuxième argument est le mot-clé broker qui spécifie l’URL du courtier de messages.

Exécution du serveur de travail de céleri

Exécutez le worker en exécutant avec l’argument worker :

$ celery -A tasks worker --loglevel=info

Appel de la tâche

Pour appeler la tâche, utilisez la méthode delay().

>>> from tasks import add
>>> add.delay(4, 4)

L’appel d’une tâche renvoie une instance [AsyncResult][1], qui peut vérifier l’état de la tâche, attendre la fin de la tâche ou obtenir sa valeur de retour. (Si la tâche a échoué, elle obtient l’exception et la trace).

Conserver les résultats

Pour garder une trace des états de la tâche, Celery doit stocker ou envoyer les états quelque part. Utilisez Redis comme moteur de résultats :

BROKER_URL = 'redis://localhost:6379/0'
BACKEND_URL = 'redis://localhost:6379/1'
app = Celery('tasks', broker=BROKER_URL, backend=BACKEND_URL)

Pour en savoir plus sur les backends de résultats, veuillez consulter [Result Backends][2].

Maintenant que le backend de résultats est configuré, appelez à nouveau la tâche. Cette fois, conservez l’instance [AsyncResult][1] renvoyée par la tâche :

>>> result = add.delay(4, 4)

La méthode ready() renvoie si la tâche a terminé le traitement ou non :

>>> result.ready()
False

Il est possible d’attendre que le résultat se termine, mais cela est rarement utilisé car cela transforme l’appel asynchrone en un appel synchrone :

>>> result.get(timeout=1)
8

Basé sur le document officiel du céleri

[1] : http://docs.celeryproject.org/en/latest/reference/celery.result.html#celery.result.AsyncResult [2] : http://docs.celeryproject.org/en/latest/userguide/tasks.html#task-result-backends