Zhong__Flask中使用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的一些经验,希望对大家有用!

关注微信公众号:

更多精彩内容  。。。  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我变了_我没变

随意 。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值