Começando com o aipo

Instalação ou configuração

Você pode instalar o Celery por meio do Python Package Index (PyPI) ou da fonte.

Para instalar a versão mais recente usando pip:

$ pip install celery

Para instalar usando easy_install:

$ easy_install celery

Baixando e instalando da fonte

Baixe a versão mais recente do Celery em http://pypi.python.org/pypi/celery/

Você pode instalá-lo fazendo o seguinte:

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

Aipo + Redis

Instalação

Dependências adicionais são necessárias para o suporte ao Redis. Instale o Celery e as dependências de uma só vez usando o pacote celery[redis]:

$ pip install -U celery[redis]

Configuração

Configure o local do seu banco de dados Redis:

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

A URL deve estar no formato de:

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

Inscrição

Crie o arquivo tasks.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

O primeiro argumento para Celery é o nome do módulo atual. Desta forma, os nomes podem ser gerados automaticamente. O segundo argumento é a palavra-chave broker que especifica a URL do agente de mensagens.

Executando o servidor do trabalhador de aipo

Execute o trabalhador executando com o argumento do trabalhador:

$ celery -A tasks worker --loglevel=info

Chamando a tarefa

Para chamar a tarefa, use o método delay().

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

Chamar uma tarefa retorna uma instância AsyncResult, que pode verificar o estado da tarefa, aguardar a conclusão da tarefa ou obter seu valor de retorno. (Se a tarefa falhou, ela obtém a exceção e o rastreamento).

Mantendo resultados

Para acompanhar os estados da tarefa, o Celery precisa armazenar ou enviar os estados para algum lugar. Use o Redis como back-end de resultado:

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

Para ler mais sobre back-ends de resultados, consulte Back-ends de resultados.

Agora com o backend de resultado configurado, chame a tarefa novamente. Desta vez, segure a instância AsyncResult retornada da tarefa:

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

O método ready() retorna se a tarefa terminou o processamento ou não:

>>> result.ready()
False

É possível aguardar a conclusão do resultado, mas isso raramente é usado, pois transforma a chamada assíncrona em síncrona:

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

Com base no documento oficial do aipo