Celery介绍
应用场景1:Web应用
用户发送一个需要较长时间 处理的请求;
传统思想会等待请求的结果(即常见到的转圈圈);
为了避免用户一直等待响应结果,在服务端可以通过异步的方式处理需要花费较长时间请求(例如调用外部服务API类似叮叮通知,邮件系统等);
服务后端创建相应的任务(创建任务是很快速的过程,执行具体任务才是真正耗时的操作),并将任务ID返回(响应)给用户;
在前端看来,此次请求已经成功了,但是具体邮件是不是发成功了,没有直接给出结果,如果想看状态或结果,只需要拿到返回的任务ID再发送请求即可;
用户可主动通过ID查看任务的执行进度,或通过前端轮询查看任务处理进度,常见的进度条就可以通过轮询实现;
如果用户不关心邮件发送的结果,就直接该干嘛干嘛去了,不用再关心;
如果需要动态监控任务状态及结果,从后台服务端看,任务结束后需要调用回调函数,将任务处理后的结果及数据进行转存或推送。应用场景2:定时任务
有一些业务场景可能需 要做定时任务,如定时发送邮件等
工作原理
Demo代码
异步任务
1 | # celery_app_task.py:启动celery |
1 | # add_task.py:把任务加入celery |
1 | # query_result.py:查询任务的执行结果 |
定时任务
Tips
启动命令:Linux和Win不一样,Celery对Win的支持不好
Linux上的启动命令
1
celery -A celery_app_task worker -l info
Win上的启动命令
1
celery -A celery_app_task worker -l info -P eventlet
Flower
启动命令
celery -A celery_app_task flower –address=127.0.0.1 –port=5566