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
Celery无法注册任务的几种情况的更多相关文章
- Tomcat内存溢出的三种情况及解决办法分析
Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三种 ...
- LoadRunner 场景运行error的几种情况
一. Error -27727: Step download timeout (120 seconds)has expired when downloading resource(s). Set th ...
- Spring如何使用JdbcTemplate调用存储过程的三种情况
注:原文 <Spring如何使用JdbcTemplate调用存储过程的三种情况 > Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,下面列出使用Jdbc ...
- Objective C中数组排序几种情况的总结
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...
- js内存泄露的几种情况
想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...
- html/css基础篇——DOM中关于脱离文档流的几种情况分析
所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列.并最终窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素.脱离文档流即是元素打乱了这个排列,或是从排版中拿走. ...
- JS生成某个范围的随机数(四种情况)
前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉 ...
- SET Transaction Isolation Level Read语法的四种情况
转自:http://www.cnblogs.com/qanholas/archive/2012/01/04/2312152.html 存储过程:SET Transaction Isolation Le ...
- php出现“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误的一种情况,及解决方法
PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误,可能是因为美元符号$的误用,看下面一种情况 class Test{ s ...
随机推荐
- 【Spring Boot 】1、Spring Boot 开始
0.写在最前面: 开始了新的征程,Spring Boot作为下一代的t开发框架,日渐流行.它作为spring mvc 的继承者,虽然二者之间没有多大联系,但是Spring Boot 的出现,大大简化 ...
- hadoop知识整理(3)之MapReduce之代码编写
前面2篇文章知道了HDFS的存储原理,知道了上传和下载文件的过程,同样也知晓了MR任务的执行过程,以及部分代码也已经看到,那么下一步就是程序员最关注的关于MR的业务代码(这里不说太简单的): 一.关于 ...
- curlPost和curlGet 请求链接
//getcurl get读取数据function curlGet($url){ $UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) App ...
- spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息
spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息 本文主要内容: 1:管理页面主机名及访问ip信息提示修改 2:获取当前注册中心的服务列表及每个服务对于的服务提供者列表 ...
- Redis学习笔记(二十一) 事务
文章开始啰嗦两句,写到这里共21篇关于redis的琐碎知识,没有过多的写编程过程中redis的应用,着重写的是redis命令.客户端.服务器以及生产环境搭建用到的主从.哨兵.集群实现原理,如果你真的能 ...
- Mariadb 10.14 mysqldump error: 1049
Mariadb 10.14 mysqldump error: 1049 Table of Contents 1. 错误信息 2. 解决方法 1 错误信息 执行表导出: mysqldump -uroot ...
- linux使用组ID(SGID)共享文件
假如你有这样一个需求,一个小组内很多成员共同研究一个项目,为了这个项目我们需要分配一个具体的目录. 所有成员都拥有该目录的使用权限,可以互相操作成员的文件及内容.而且不允许其他人查看. 现在开始操作: ...
- [计网笔记] 传输层---UDP
- (九)HttpClient获取cookies
原文链接:https://blog.csdn.net/cheny1p1ng/article/details/90780024 旧版本DefaultHttpClient 使用getCookieStore ...
- JVM进阶之路(一)
JVM是Java程序运行的基本,了解Java程序的运行原理绝对有必要了解JVM的内容,JVM的内容其实很多,而且版本不同,其中的内容也很多不同,接下来就通过几篇文章来慢慢讲述JVM的内容. 一.Jvm ...