消息队列是网站架构中常用的组件,在异步任务、高并发等场景下使用广泛,celery是py下常用的消息队列,最近有一个异步计算需求,正好来学习一下celery的基本用法。
开发环境为window10、python3.6
首先安装celery,我们这里使用redis作为消息中间件
pip install celery[redis]
一共需要编写两个文件,一个任务(生产者)文件,一个生产者文件。
编写一个简单的任务文件celery_demo01.py,两个数相加,并加入sleep查看效果
# coding=utf-8
import time
from celery import Celery
broker = 'redis://localhost:6379/1'
backend = 'redis://localhost:6379/2'
app = Celery('demo01', broker=broker, backend=backend)
@app.task
def add(x, y):
print("enter call func")
time.sleep(5)
return x + y
编写生产者文件app.py
# coding=utf-8
from celery_demo01 import add
if __name__ == "__main__":
print("start")
result = add.delay(2,8)
print("end")
print(result)
现在开始测试
2.进入工程目录,输入命令,启动worker
celery worker -A celery_demo01 -l INFO
3.进入工程目录,启动生产者
python app.py
可以看到任务已经成功提交但是worker却报错
问了度娘发现是windows10下celery的异常,解决方案就是
- pip install eventlet
- 启动worker时的命令加入参数: celery worker -A celery_demo01 -l INFO -P eventlet