平台项目 ~ celery 异步之异步处理功能

Posted danhuangpai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平台项目 ~ celery 异步之异步处理功能相关的知识,希望对你有一定的参考价值。

一 简介:今天来聊聊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异步调用

     

以上是关于平台项目 ~ celery 异步之异步处理功能的主要内容,如果未能解决你的问题,请参考以下文章

Django项目中使用celery做异步任务

Celery学习--- Celery 最佳实践之与django结合实现异步任务

python项目_使用异步功能,celery

celery(异步处理)+redis

Django中使用celery来异步处理和定时任务

celery异步,延时任务, 周期任务