Celery无法注册任务的几种情况

Celery处理异步任务使得程序不必等待任务结束就可以继续执行其它任务或返回数据结果, 在处理耗时任务如发送邮件、发送信息验证码等场景下非常适用!

  Celery使用方法灵活,根据具体业务有不同的部署和使用方法,经常会遇到的一个问题:在使用命令启动Celery时,任务没有注册或其它错误,导致无法正常调用Celery,这里举例几种常见的情况,说明错误和解决方案,供大家参考!

1.版本问题

在Linux和window中或Django和Flask中使用Celery,版本不同或扩展插件不同(如django-celery 3.3.0 djangocelery 0.1.1 Flask-Celery 2.4.3 Flask-Celery3 celery 4.3.0  等等)会导致无法使用Celery!笔者使用Flask框架配合celery  4.3.0版本,使用正常!
————————————————

2.没有注册tasks

如下图代码,如果没有添加任务到Celery的autodiscover_tasks方法中,同样也是不会有作用的! 

"""启动文件"""
from celery import Celery
from celery_tasks import celeryconfig
 
# 定义celery app:名称
celery_app = Celery("YOYO")
 
# 加载配置
celery_app.config_from_object(celeryconfig)
 
# 自动发现和注册tasks
celery_app.autodiscover_tasks(["celery_tasks.test1",
                               "celery_tasks.test2",
                               "celery_tasks.test3",])

3.代码或语法不对

如果使用自定义Celery装饰函数的方式,在其它地方调用,那么tasks.py名称是固定的,必须是这个名字,才能检测到!

 

在使用装饰器装饰函数时,task而不是tsaks!

4.定义处理Celery的函数和调用体在同一文件,也是不起效!
5.使用了外部引用或其它本文件无法知晓的引用!

因为Celery是可独立于程序运行的,需要单独的启动,如果在任务处理的函数中引用了其它对象,是无法识别的,如下图举例:

 

from pymongo import MongoClient
 
from celery_tasks.main import celery_app
import datetime
 
# from settings import MongoClient_conn
MongoClient_conn = MongoClient('127.0.0.1', 27017)  # 连接mongodb

 如果使用from settings import MongoClient_conn方式从项目主配置文件settings引入数据库的连接,是不起效的,因为此py脚本不知道settings是什么  所以要引入MongoDB的客户端连接才行!可以在celery的配置文件配置连接,这样在celery任务中引用是行的!

以上就是笔者使用Celery的一些经验,希望对大家有用!
————————————————
版权声明:本文为CSDN博主「我变了_我没变」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/anyedianxia/article/details/90763069

posted @ 2020-01-03 10:47  秋华  阅读(3493)  评论(1编辑  收藏  举报