一 简介:今天来聊聊celery两大功能之一的异步处理
二 标准流程:
1 建立 config 文件
class Config:
ENABLE_UTC = False
CELERY_RESULT_BACKEND = ‘redis://127.0.0.1:6379/5‘
BROKER_URL = ‘redis://127.0.0.1:6379/6‘
注意 1 所有参数都必须大写,并且为固定value
2 队列和结果集本文都将采用redis,命名两个不同的库就行
2 建立 celery文件
app = Celery(‘test1‘)
app.config_from_object(Config)
app.autodiscover_tasks([‘celery_demo‘])
3 建立tasks文件
@ app.task #装饰器 这里也可以采用 @shared_task
def a():
return "ok" 返回值
4 启动多worker
1 这里要注意 输出结果确保task发现.不然是无法调用的
类似格式 .tasks.function
2 在celery项目同等级目录执行相关命令
celery -A celery_demo.celery worker --loglevel=info -P eventlet -f log.name
5 调用方式
result=a.delay()
1 调用delay延迟函数
2 result.ready() True代表任务完成 False代表未完成
result.status
PENDING,表示没有执行
三 错误解决办法
错误1 Received unregistered task of type ‘mysql_web.celery_demo.tasks.mail‘.
可能原因
1 如果task有被注册的话 填写 @app.task(name=‘提示的任务名‘)
2 如果task没有被注册的话,这种情况发生在引入绝对路径的第三方包,可以暂时将文件拷贝一份
四 总结
1 以上是一个融入drf框架的标准celery异步调用
原文地址:https://www.cnblogs.com/danhuangpai/p/11511029.html