Primeros pasos con el apio

Instalación o Configuración

Puede instalar Celery a través de Python Package Index (PyPI) o desde la fuente.

Para instalar la última versión usando pip:

$ pip install celery

Para instalar usando easy_install:

$ easy_install celery

Descargando e instalando desde la fuente

Descargue la última versión de Celery desde http://pypi.python.org/pypi/celery/

Puedes instalarlo haciendo lo siguiente:

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

Apio + Redis

Instalación

Se requieren dependencias adicionales para la compatibilidad con Redis. Instale Celery y las dependencias de una sola vez usando el paquete celery[redis]:

$ pip install -U celery[redis]

Configuración

Configure la ubicación de su base de datos Redis:

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

La URL debe tener el formato de:

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

Solicitud

Cree el archivo tareas.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

El primer argumento de Apio es el nombre del módulo actual. De esta manera, los nombres se pueden generar automáticamente. El segundo argumento es la palabra clave broker que especifica la URL del intermediario de mensajes.

Ejecutando el servidor de trabajadores de apio

Ejecute el trabajador ejecutando con el argumento del trabajador:

$ celery -A tasks worker --loglevel=info

llamando a la tarea

Para llamar a la tarea, usa el método delay().

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

Llamar a una tarea devuelve una instancia AsyncResult, que puede verificar el estado de la tarea, esperar a que finalice la tarea u obtener su valor de retorno. (Si la tarea falló, obtiene la excepción y el rastreo).

Mantener los resultados

Para realizar un seguimiento de los estados de la tarea, Celery debe almacenar o enviar los estados a alguna parte. Use Redis como el backend de resultados:

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

Para obtener más información sobre los backends de resultados, consulte Backends de resultados.

Ahora, con el backend de resultados configurado, vuelva a llamar a la tarea. Esta vez, conserve la instancia AsyncResult que devolvió la tarea:

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

El método ready() devuelve si la tarea ha terminado de procesarse o no:

>>> result.ready()
False

Es posible esperar a que se complete el resultado, pero rara vez se usa porque convierte la llamada asincrónica en síncrona:

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

Basado en documento oficial de apio