使用celery将方法异步化改造
加注解
1.在需要改造的方法上添加@app.task注解(@shared_task也可以)
改配置
2.我这里修改了配置,为改造方法创建了独立的消息队列
3.需求本地执行测试,所以
调用
4.调用delay方法,进行异步执行
启动celery
5.这里指定了运行环境DJANGO_MODE=libolin
指定目标队列-Q item_import
我这里是在配置文件中单独创建了队列,所以启动中需要指定队列
开始监听
测试
知识点补充
使用函数名.delay()即可使函数异步执行
可以通过result.ready()
来判断任务是否完成处理
如果任务抛出一个异常,使用result.get(timeout=1)
可以重新抛出异常
如果任务抛出一个异常,使用result.traceback
可以获取原始的回溯信息
@app.task和@shared_task的区别
1.去看一下 shared_task 的源码 多了一个线程锁,我的理解是多进程情况下,控制任务分发时的资源竞争问题。
2.一般情况使用的是从celeryapp中引入的app作为装饰器:@app.task;
3.django在app中定义的task则需要使用@shark_task,并且由shared_task装饰的任务可以被任何app调用。