python web 异步非堵塞任务的实现
1.使用celery异步调度任务框架,redis作为celery的broker和result backend2.实现web接口的非堵塞响应 应用场景比如用户注册登录发邮件/用户提交其他请求,后端返回用户taskid3.实现查询单个异步任务(taskid)执行状态/结果4.实现查询全部异步任务接口
依赖环境
python版本3.6
依赖包
celery==4.2.0redis==2.10.6flask==0.11.1如果遇到celery服务不正常 一般是python环境和celery版本不兼容所致
celery服务(celery_test项目结构)
celery.py
tasks.py(堵塞任务)
启动celery服务
cd celerytest(tasks.py的父目录)celery -B -A celerytest worker --loglevel=info
出现以下内容 证明服务已启动
web api 服务
api.py
Helper.py
启动web服务
浏览器访问堵塞接口
http://0.0.0.0:7000/api/v1/sync?n=30000可以看到响应并没有等待20s 返回的task_id=9a0eb2c1-0830-41e9-bebd-756273b44979,注意观察celery服务已经接收到异步任务
查询单个异步任务(task_id)执行状态/结果
http://0.0.0.0:7000/api/v1/task?task_id=9a0eb2c1-0830-41e9-bebd-756273b44979
查询全部异步任务接口
http://0.0.0.0:7000/api/v1/allTask
领取专属 10元无门槛券
私享最新 技术干货