芹菜 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