芹菜 Redis

安装

Redis 支持需要其他依赖项。使用 celery[redis] 软件包一次安装 Celery 和依赖项:

$ pip install -U celery[redis]

组态

配置 Redis 数据库的位置:

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

URL 应采用以下格式:

redis://:password@hostname:port/db_number

应用

创建文件 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

Celery 的第一个参数是当前模块的名称。这样就可以自动生成名称。第二个参数是 broker 关键字,它指定消息代理的 URL。

运行芹菜工作服务器

通过使用 worker 参数执行来运行 worker:

$ celery -A tasks worker --loglevel=info

调用任务

要调用该任务,请使用 delay() 方法。

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

调用任务会返回 AsyncResult 实例,该实例可以检查任务的状态,等待任务完成或获取其返回值。 (如果任务失败,则会获得异常和回溯)。

保持结果

为了跟踪任务的状态,Celery 需要在某处存储或发送状态。使用 Redis 作为后端的结果:

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

要阅读有关结果后端的更多信息,请参阅结果后端

现在配置了结果后端,再次调用该任务。这次坚持从任务返回的 AsyncResult 实例:

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

ready() 方法返回任务是否已完成处理:

>>> result.ready()
False

可以等待结果完成,但这很少使用,因为它将异步调用转换为同步调用:

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

基于芹菜官方文件