首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Celery/Django:启动worker时,shared_task任务从任务注册表中消失或未注册

Celery是一个基于Python的分布式任务队列框架,而Django是一个流行的Python Web框架。在使用Celery和Django结合开发时,有时会遇到启动worker后,shared_task任务从任务注册表中消失或未注册的问题。

这个问题通常是由于Celery和Django的配置不正确或者启动worker的方式不正确导致的。下面是一些可能的原因和解决方法:

  1. 配置问题:确保在Django的配置文件中正确配置了Celery相关的设置,包括BROKER_URL(消息代理的URL)、CELERY_RESULT_BACKEND(结果存储的后端)、CELERY_IMPORTS(任务模块的导入路径)等。可以参考Celery和Django的官方文档进行配置。
  2. 启动worker方式问题:确保使用正确的命令启动Celery worker。在Django项目的根目录下,可以使用以下命令启动worker:
  3. 启动worker方式问题:确保使用正确的命令启动Celery worker。在Django项目的根目录下,可以使用以下命令启动worker:
  4. 其中,your_project_name是你的Django项目的名称。这样可以确保worker正确加载并注册任务。
  5. 任务注册问题:确保在Django的某个app中正确定义了任务,并且在app的__init__.py文件中导入了任务模块。例如,假设你的任务定义在tasks.py文件中,那么在app的__init__.py文件中添加以下代码:
  6. 任务注册问题:确保在Django的某个app中正确定义了任务,并且在app的__init__.py文件中导入了任务模块。例如,假设你的任务定义在tasks.py文件中,那么在app的__init__.py文件中添加以下代码:
  7. 这样可以确保任务被正确注册。

如果以上方法都没有解决问题,可以尝试以下步骤:

  1. 检查Celery和Django的版本兼容性,确保使用的版本是兼容的。
  2. 检查Celery和Django的依赖库是否正确安装,并且版本匹配。
  3. 检查Celery和Django的日志文件,查看是否有相关的错误或警告信息。

总结起来,要解决Celery/Django启动worker时任务消失或未注册的问题,需要确保正确配置Celery和Django的相关设置,使用正确的命令启动worker,并正确定义和导入任务模块。如果问题仍然存在,可以进一步检查版本兼容性和依赖库安装情况。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python测试开发django-160.Celery 定时任务 (beat)

任务的消费者是WorkerCelery 本身不提供队列服务,推荐用RedisRabbitMQ实现队列服务。 Worker 执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。...这确保在 Django 启动加载应用程序,以便 @shared_task 装饰器(稍后提到)将使用它: proj/proj/__init__.py: # This will make sure the...shared_task 这个装饰器 添加setting配置 setting.py添加配置 CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER...task 参数是对应app目录下的tasks文件任务函数名称 schedule 运行周期,支持contrab表达式 args 运行任务时候带上的参数 启动worker 和beat服务 启动worker...,执行任务 celery -A MyDjango(django 项目名称) worker -l info 运行日志 D:\202107django\MyDjango>celery -A MyDjango

60420

python测试开发django-196.python3.8+django2+celery5.2.7环境准备

这可以确保在 Django 启动加载应用程序,以便@shared_task装饰器(稍后提到)将使用它: proj/proj/__init__.py内容: # This will make sure the...我们还将 Django 设置模块添加为 Celery 的配置源。这意味着您不必使用多个配置文件,而是直接 Django 设置配置 Celery;但如果需要,您也可以将它们分开。...最后,该debug_task示例是一个转储自己的请求信息的任务。这是使用bind=True Celery 3.1 引入的新任务选项来轻松引用当前任务实例。...使用 @shared_task 装饰器 您编写的任务可能会存在于可重用的应用程序,而可重用的应用程序不能依赖于项目本身,因此您也不能直接导入您的应用程序实例。...在生产环境,您将希望在后台将工作程序作为守护程序运行 - 请参阅守护程序-但对于测试和开发,能够使用 celery worker manage 命令启动工作程序实例很有用,就像您一样d 使用 Django

51610
  • python测试开发django-159.Celery 异步与 RabbitMQ 环境搭建

    任务的消费者是WorkerCelery 本身不提供队列服务,推荐用RedisRabbitMQ实现队列服务。 Worker 执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。...==3.3.1 RabbitMQ 环境 Broker(RabbitMQ) 负责创建任务队列,根据一些路由规则将任务分派到任务队列,然后将任务任务队列交付给 worker 先使用docker 搭建RabbitMQ...这确保在 Django 启动加载应用程序,以便@shared_task装饰器(稍后提到)将使用它: # This will make sure the app is always imported when...backend参数是可选的,如果想要查询任务状态或者任务执行结果必填, Celery的后端用于存储任务结果。 rpc意味着将结果作为AMQP消息发送回去。...worker 前面pip已经安装过celery应用了,celery是一个独立的应用,可以启动worker celery -A MyDjango worker -l info 其中MyDjango是你自己的

    1.1K30

    【译】Celery文档3:在Django中使用Celery

    这确保了在 Django 启动加载应用程序,以便 @shared_task 装饰器(稍后提到)将使用它: proj/proj/__init__.py: # This will make sure the...使用 Celery 3.1 引入的bind=True选项来轻松使用当前任务实例。...:https://github.com/celery/celery/tree/main/examples/django/ 在数据库事务结束触发任务 Django 的一个常见陷阱是立即触发任务,而不是等到数据库事务结束...在这种情况下, send_email 任务可能在视图将事务提交到数据库之前启动,因此任务可能无法找到用户。...启动工作进程 在生产环境,你会希望在后台运行 worker 作为守护进程 - 参见 Daemonization[1] - 但对于测试和开发来说,能够使用 celery worker manage 命令启动工作线程实例很有用

    37510

    Django Celery初识

    对于任务调度的实现方案,其实开源的项目有很多。 我先说说对于任务调度的认识,如果数据库层面来说,任务调度就是scheduler,这一点在Oracle中体现的更为细致。...Oracle创建scheduler,在后台运行JOB完成数据的处理,基本上会把一个任务拆分成不同的几个维度属性。...>pip list|grep celery celery (3.1.20) celery-with-redis (3.0) django-celery (3.2.2) 如果是在Django在较新的版本...启动服务 python manage.py runserver 然后打开另外一个窗口,启动celery的服务 python manage.py celery worker -l info 这个过程很可能会跑出警告...export C_FORCE_ROOT=test >python manage.py celery worker -l info 可以启动日志看到task的信息: [tasks] . celery_app.tasks.add

    1.3K70

    Django+Django-Celery+Celery的整合实战

    任务执行单元 Worker Worker 是执行任务的处理单元,它实时监控消息队列,获取队列调度的任务,并执行它。 任务结果存储 Backend Backend 用于存储任务的执行结果,以供查询。...异步任务 使用 Celery 实现异步任务主要包含三个步骤: 创建一个 Celery 实例 启动 Celery Worker 应用程序调用异步任务 一、快速入门 本地环境: OS:centOS6.5...然后在apps下增加了一个init.py文件,这时报错没了,但是apps下每个app的tasks.py任务函数还是无法被djangocelery worker找到。...django-web、启动celery beat 启动 celery worker进程 python manage.py runserver 0.0.0.0:8001#启动django的应用,可以动态的使用...django-admin来管理任务 python manage.py celery beat #应该是用来监控任务变化的 python manage.py celery worker -c 6 -

    2.1K31

    Django配置Celery执行异步任务和定时任务

    通知worker队列中有任务worker去队列取出任务执行,每一个worker就是一个进程 存储结果的backend:执行结果存储在backend,默认也会存储在broker使用的MQ队列服务,也可以单独配置用何种服务做...r}'.format(self.request)) 5.在website/__init__.py文件增加如下内容,确保django启动的时候这个app能够被加载到 from __future__ import...-A website worker -l info 9.这样在调用post这个方法,里边的add就可以异步处理了 定时任务 定时任务的使用场景就很普遍了,比如我需要定时发送报告给老板~ 定时任务配置...def report(): return 5 3.启动celery beat,celery启动了一个beat进程一直在不断的判断是否有任务需要执行 # celery -A website beat...-l info Tips 如果你同时使用了异步任务和计划任务,有一种更简单的启动方式celery -A website worker -b -l info,可同时启动worker和beat 如果使用的不是

    2.2K20

    python测试开发django-157.celery异步与redis环境搭建

    这确保在 Django 启动加载应用程序,以便@shared_task装饰器(稍后提到)将使用它: proj/proj/init.py: # This will make sure the app is...always imported when # Django starts so that shared_task will use this app. from .celery import app...as celery_app __all__ = ('celery_app',) 上面这段固定的,不用改 tasks任务 在app下新建tasks.py,必须要是tasks.py文件名称,django会自动查找到...y @shared_task def mul(x, y): return x * y tasks.py可以写任务函数add、mul,让它生效的最直接的方法就是添加app.task shared_task...worker 前面pip已经安装过celery应用了,celery是一个独立的应用,可以启动worker celery -A MyDjango worker -l info 其中MyDjango是你自己的

    53730

    如何在django设置定时任务

    Django 作为后端Web开发框架,有时候我们需要用到定时任务来或者固定频次的任务来执行某段代码,这时我们就要用到Celery了。...',) 2.3 在task.py添加计划任务 编辑test/demo/task.py文件,添加计划任务,内容如下: # Create your tasks here from __future__ import...选择对应的任务,设置定时或者周期时间 3.2 启动定时的celery服务 注意:celery依赖redis服务,需要提前运行redis服务:`redis-server` # 以下两个命令在不同的shell...窗口里执行,需要在django的目录下 python manager.py celery beat -l info #接收定时任务的命令 python manager.py celery worker...-l info #执行定时任务的命令,此shell窗口会看到任务的输入信息 3.3 启动单次的celery服务 注意:celery依赖redis服务,需要提前运行redis服务:`redis-server

    2.6K10

    Celery-分布式任务队列学习笔记

    以上是celery自己官网的介绍 celery的应用场景很广泛 处理异步任务 任务调度 处理定时任务 分布式调度 好处也很多,尤其在使用python构建的应用系统,无缝衔接,使用相当方便。...celery只需要在proj同级目录下: $ celery -A proj worker -l info 在django中使用celery 我们的django的项目的目录结构一般如下 proj/...测试celery任务 add.delay(4,5) return render(request,'index.html') 然后就可以启动项目,celery需要单独启动,所以需要开两个终端...,分别 启动web应用服务器 $ python manage.py runserver 启动celery $ celery -A proj worker -l info 然后访问浏览器就可以在启动celery...lts django1.9搭建测试成功 上述文字皆为个人看法,如有错误建议请及时联系我

    82110

    Python分布式任务队列CeleryDjango如何实现异步任务和定时任务

    pip安装:(安装先断开celery服务) $ pip install flower 启动celery的flower,默认5555端口: celery -A tasks flower --broker...CeleryWorker会去检索队列任务,将任务一个个执行,执行完后存下来,这时我们也能在系统拿到结果,包括在Flower能够监控到任务的状态。...启动Celery、Flower和redis来管理异步任务DjangoCelery集成:定时任务Celery中用一个叫做Beat的调度进程来管理和调度定时任务。...-A recruitment worker -l INFO 启动flower.sh: DJANGO_SETTINGS_MODULE=settings.production celery -A recruitment...Tasks 系统启动自动注册定时任务 在主应用下新建celery.py from celery.schedules import crontab from recruitment.tasks import

    1.5K20

    python celery 模块

    , CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' ) 配置文件获取: 先把配置存入配置文件'celeryconfig.py' BROKER_URL...在View处理任务用户处于等待状态,直到页面返回结果 异步请求:View先返回response,再在后台处理任务。用户无需等待,可以继续浏览网站。...当任务处理完成,我们可以再告知用户 2.建立消息队列 消息队列可以使用RabbitMQ、Redis 等 3.安装django-celery pip install celery django-celery...需要注意的是,与一般的.py实现celery不同,tasks.py必须建在各app的根目录下,且不能随意命名 6.生产任务 在需要执行该任务的View,通过test.delay的方式来创建任务,并送入消息队列...def produce(): a =1 b =2 r = test.delay(a,b) 7.启动work #先启动服务器 python manage.py runserver #再启动worker

    1.1K40

    python测试开发django-197.django-celery-beat 定时任务

    # 设为0,存储结果永不过期 # CELERY_RESULT_EXPIRES = xx CELERY_TASK_RESULT_EXPIRES = 60*60*24 # 后端存储的任务超过一天,自动删除数据库任务数据...,单位秒 CELERY_MAX_TASKS_PER_CHILD = 1000 # 每个worker执行1000次任务后,自动重启worker,防止任务占用太多内存导致内存泄漏 CELERY_TASK_SERIALIZER...,比如django下有自己的app,在app下创建了一个tasks.py文件 # Create your tasks here from celery import shared_task @shared_task...def add(x, y): return x + y 启动worker与beat 最后启动worker与beat celery -A proj worker -l info celery -...A proj beat -l info linux 后台启动使用 supervisord 后台启动celery 服务(worker/beat) 相关教程参考这篇https://www.cnblogs.com

    66510

    Django Celery4 定时任务配置和使用

    '] #3.3 启动celery 启动worker(在项目目录下,能看到manage.py文件的目录) # celery4是项目名 celery multi start worker1 -A celery4...celery(win环境不支持脚本启动) vim django-celery4.sh #!...对于django项目,如果使用数据库存储定时任务,各有优缺点(针对我的项目) 优点: 可以在djcelery的数据库表,修改定时任务的时间 缺点: 如果在代码中将定时任务要执行的函数修改了,需要把...djcelery的表清空,否则,celery不会执行新的定时函数,回到数据库执行旧的任务 所以,在这里,django不配置使用数据库存储定时任务,这样每次修改之后,执行的都是新的定时任务函数(前提把队列清空...) CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' #5 其他命令 #5.1 清空任务队列 还来不及被worker消费的任务都会存放到任务队列

    1.2K20
    领券