使用RabbitMQ结合Celery
RabbitMQ 是默认的中间人,首先安装RabiitMQ
apt-get install rabbitmq
# 添加用户
rabbitmqctl add_user my_user my_password
# 添加虚拟主机
rabbitmqctl add_vhost myvhost
# 为用户赋予相应虚拟主机权限
rabbitmqctl set_permissions -p myvhost my_user ".*" ".*" ".*"
启动服务器
rabbitmq-server
也可以添加-detached属性来后台运行
rabbitmq-server -detached
不要kill停止RabbitMQ,使用rabbitmqctl命令
rabbitmqctl stop
启动服务器也可以使用Celery来启动。本实例中使用该方式启动
参考Celery官网
1. 创建tasks.py
from celery import Celery
app = Celery('tasks', broker='amqp://my_user:my_password@localhost/myvhost', backend='amqp')
@app.task
def add(x,y):
return x + y
每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,进行执行。celery实现了一个backend,用于存储消息及celery执行的消息和结果。对于brokers,官方推荐rabbitmq和redis,至于backend一般是数据库,也可以使用rabbitmq和redis
使用Celery参数启动程序
$ celery -A tasks worker --loglevel=info
进入python交互
from tasks import add
result = add.delay(3, 5)
result
输出:<AsyncResult: bf7e254a-3bf7-445c-83dc-a688fef1082c>
result.ready()
输出:True
result.get()
输出:8
使用Redis结合Celery
安装redis python驱动
pip install redis
编写tasks.py
from celery import Celery
brokers='redis://127.0.0.1:6379/5'
backend='redis://127.0.0.1:6379/6'
app = Celery('tasks',broker=brokers,backend=backend)
@app.task
def add(x, y):
return x + y
启动
celery -A tasks worker --loglevel=info
python交互环境
from tasks import add
result = add.delay(2, 3)
result.ready()
输出:True
result.get()
输出:5