上篇介绍过Rabbitmq
的基本原理,真正在工程和生产环境使用时,如果直接用pika
来操作不免复杂,细节众多。今天要写一写是Celery,可以基于Rabbitmq
轻松建立异步任务。
上篇介绍过Rabbitmq
的基本原理,真正在工程和生产环境使用时,如果直接用pika
来操作不免复杂,细节众多。今天要写一写是Celery,可以基于Rabbitmq
轻松建立异步任务。
Celery自身无法独立运行,需要借助一个broker
建立消息队列。broker
的选择范围包括Rabbitmq
和Redis
等,下面以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-96d2-4274-a431-1fb3b0de6c41="">
通过调用delay
方法,就可以执行异步任务,此时Celery充当了一个生产者,向Rabbitmq的消息队列中投递了一个消息,从管理后台可以看到消息详情。
通过如下命令启动消费者,就可以读取消息队列的消息,进而执行异步任务。
celery -A tasks worker --loglevel=info
这就是通过Celery借助Rabbitmq
建立异步任务的整个过程。
</asyncresult:>