当前位置: 首页 > 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())

 

 

相关文章:

  • 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上搭建个人图床,保姆级图文教程,实现图片高效管理
  • .net制作网站开发教程/东莞网络推广
  • 那个网站的是做vb题目的/微信软文范例100字
  • 做网站的哪家公司好/我有广告位怎么找客户
  • 网站建设青岛公司/东莞seo技术
  • 枣强网站建设/广州网站seo公司
  • 做挖机配件销售的网站/海外推广代理公司