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 ...
随机推荐
- [每日一题2020.06.11]Codeforces Round #644 (Div. 3) H
A-E见 : 这里 题目 我觉得很有必要把H拿出来单独发( 其实是今天懒得写题了 ) problem H 一个从 1 到 $ 2^m - 1$ 的长度为m的连续二进制序列, 删去指定的n个数, 问剩余 ...
- (十三)exec-maven-plugin配置及使用
原文链接:https://www.cnblogs.com/lianshan/p/7358966.html 背景: 如果你想在项maven生命周期内,运行一段java代码,或者一段独立的程序,或者说我们 ...
- 一文搞懂:Adaboost及手推算法案例
boosting Boosting 算法的特点在于:将表现一般的弱分类器通过组合变成更好的模型.代表自然就是我们的随即森林了. GBDT和Adaboost是boost算法中比较常见的两种,这里主要讲解 ...
- Snmp扫描-snmpwalk、snmpcheck
SNMp经常被错误配置,是信息的金矿. SNMP服务是使用明文传输的,即使不能通过community进行查询,也有可能使用抓包嗅探的方法得到SNMP数据包中的数据. snmpwalk命令可以查询到很多 ...
- Java 多线程基础(十二)生产者与消费者
Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...
- 【秒懂Java】【第1章_初识Java】01_编程语言
各位小伙伴们好哇!从今日起,我将开始更新<秒懂Java>系列文章,从0开始讲解Java的方方面面,后面也将推出配套的视频版,欢迎大家保持关注! 我会尽力办到:在保证通俗易懂的同时,不丢失知 ...
- 入门大数据---Hive分区表和分桶表
一.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为 HDFS 上表目录的子目录,数据按照分区存储在子 ...
- py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. : java.lang.IllegalArgumentException: Unsupported class file major version 55
今天小编用Python编写Spark程序报了如下异常: py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apach ...
- 基于jQuery的打字机函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- For setting NODE_ENV you can use any of these methods.
method 1: set NODE_ENV for all node apps Windows: set NODE_ENV=production Linux or other Unix based ...