celery芹菜入门


备注

“Celery是一个基于分布式消息传递的异步任务队列/作业队列。” - http://www.celeryproject.org/

Celery非常适合非同步和预定的后台任务。它通常用于长时间运行的任务,这些任务是Django或Flask应用程序的一部分。

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

基于芹菜官方文件

安装或设置

您可以通过Python包索引(PyPI)或从源安装Celery。

要使用pip 安装最新版本:

$ pip install celery
 

要使用easy_install 安装:

$ easy_install celery
 

从源代码下载和安装

http://pypi.python.org/pypi/celery/下载最新版本的Celery

您可以通过执行以下操作来安装它:

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