Celery - 基于Rabbitmq的异步任务队列

上篇介绍过Rabbitmq的基本原理,真正在工程和生产环境使用时,如果直接用pika来操作不免复杂,细节众多。今天要写一写是Celery,可以基于Rabbitmq轻松建立异步任务。

Celery自身无法独立运行,需要借助一个broker建立消息队列。broker的选择范围包括RabbitmqRedis等,下面以Rabbitmq为例,说明如何建立异步执行的任务。

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

安装完成Celery包之后,创建如上代码。通过app.task这个装饰器,就可以建立add这个异步任务。

>>> add.delay(1,1)
<asyncresult: d3046cf0&#45;96d2&#45;4274&#45;a431&#45;1fb3b0de6c41="">

通过调用delay方法,就可以执行异步任务,此时Celery充当了一个生产者,向Rabbitmq的消息队列中投递了一个消息,从管理后台可以看到消息详情。

通过如下命令启动消费者,就可以读取消息队列的消息,进而执行异步任务。

celery -A tasks worker --loglevel=info

这就是通过Celery借助Rabbitmq建立异步任务的整个过程。

</asyncresult:>