当前位置: 首页 > news >正文

对celery的,路径,任务路径问题。

用if_main__的celery启动模式:必须修改为threads

if __name__ == '__main__':
    celery_app.worker_main(argv=['worker', '--loglevel=info',"--pool=threads",'-c',2])

将--pool为threads、gevent、solo,分别代表多线程、协程、单机模式。Celery默认为多进程模式prefork。

否则任务会被阻塞。

定义任务的问题:

如果你给task/share_task了bind=True

必须要给第一个参数为self。但是你在使用时不需要传输self,

否则报错。

 

你不需要用bind即可,但是一定不要有self。否则报错

 

在win上用命令启动celery的问题:

celery   -A  celerywork.mycelery worker --loglevel=info --pool=eventlet

 

如果使用python一定要安装eventlet/threads

而且在启动redis时一定要加上后缀eventlet/threads

 

 

正确的配置流程:最关键

主要就是导入的问题:

在celery中在这个main非常关键:这个就是所有需要配置和使用app里的task(不报错自定义task)导入的开头。否则一定会报错。

即注意如果你在app所在里修饰了任务。那么必须要将main修改到当前app所在。(因为main是app里配置文件所需的第一个相对位置,一般将从所有需要配置导入的相对上一级开始到当前app所在py/配置文件所在)

这样所有配置文件都能通过main向下寻找。也就是app文件里main是最高查询路径。

还有一点就是py的路径是在即,被需要用位置的相对使用的。

(被使用的函数所在py文件相对位置)

示例:

 

 

 

import json
# from celerywork.VerificationCode import generate_verification_code
from celery import Celery,shared_task
celery_app= Celery(main='celerywork')
# celery_app.conf.update(broker_url = 'redis://:123456@192.168.117.158:6379/0',
#                          result_backend = 'redis://:123456@192.168.117.158:6379/1',
#                          timezone ="Asia/shanghai",
#                          task_serializer='json',
#                          accept_content=['json'],
#                          enable_utc = True
# )
celery_app.config_from_object('celerywork.celeryconfig')
@shared_task(bind=True)
def add(self, x, y):
    print(1)
    return x+y
if __name__ == '__main__':
    celery_app.worker_main(argv=['worker', '--loglevel=info',"--pool=eventlet",'-c',2])
broker_url = 'redis://:123456@192.168.117.158:6379/0'
result_backend = 'redis://:123456@192.168.117.158:6379/1'
timezone ="Asia/shanghai"

# 指定导入任务模块,这个一般用于是否需要的。一般是share_task修饰
autodiscover_tasks=(['celerywork.VerificationCode','celerywork.mycelery'])
# 指定自动导入的任务模块
imports = ('celerywork.VerificationCode',)
task_serializer='json'
accept_content=['json']
enable_utc = True
task_acks_late=False
worker_prefetch_multiplier = 1
from celerywork.VerificationCode import generate_verification_code
re=generate_verification_code.delay()
print(re.get())

 

 

http://www.dtcms.com/a/52997.html

相关文章:

  • QDBus:Qt对DBus的封装支持
  • Springboot集成dubbo完整过程(三)
  • gitbash忽略未追踪文件的解决方式
  • 四阶龙格-库塔(Runge-Kutta)算法详解
  • STM32Cubemx配置E22-xxxT22D lora模块实现定点传输
  • 数据库事务的 ACID,通过MVCC能做什么
  • qt将文件压缩成zip包
  • 【软件系统架构】系列三:数据库系统之三
  • Qt:day4
  • DeepSeek本机部署(基于Ollama和Docker管理)
  • 第六十:跨组件通信-依赖注入(父传递给其他组件)
  • C# | 委托 | 事件 | 异步
  • Varjo XR-4 混合现实驾驶仿真解决方案
  • 迷你世界脚本UI五子棋小游戏
  • JDBC 完全指南:掌握 Java 数据库交互的核心技术
  • SpringBoot为什么要禁止循环依赖?
  • 从零开始的 Kafka 学习(一)| 概念,Java API
  • ⭐算法OJ⭐跳跃游戏【动态规划 + 单调队列】(C++实现)Jump Game 系列 VI
  • 场景题:10亿QQ用户,如何统计在线人数?
  • 2025最新在GitHub上搭建个人图床,保姆级图文教程,实现图片高效管理
  • 通过RK3588的cc-linaro-7.5.0交叉编译器搭建QT交叉编译环境QtCreator(无需编译QT源码)
  • 将数据库结构化数据整合到RAG问答中的方式
  • android .rc文件
  • 【图像识别UI自动测试技术第二章】模版匹配算法学习分享
  • office或者word排版中,复制/黏贴进来文字不会自动换行,如何处理?
  • 系统架构设计师—计算机基础篇—进度管理
  • 在线研讨会 | 加速游戏和AI应用,全面认识Imagination DXTP GPU
  • 防火墙虚拟系统实验
  • leetcode 1328. 破坏回文串 中等
  • FieldFox 手持射频与微波分析仪