【问题标题】:Celery doesn't autodiscover tasks from all appsCelery 不会自动发现所有应用程序的任务
【发布时间】:2016-11-11 17:14:49
【问题描述】:

我对所有 y 应用程序的自动发现任务都有疑问。

对于项目

proj
|-- settings.py
|-- app_tasks_found
|   |-- tasks.py
|
|-- app_cant_find_tasks
|   |-- tasks.py

以及以下设置

INSTALLED_APPS = [
    'proj.app_tasks_found',
    'proj.app_cant_find_tasks',
]
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
from django.conf import settings
app = Celery('proj')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

在我开始 celery worker 之后

celery worker -l info -A proj

它只显示来自app_tasks_found 的任务,而不是来自app_cant_find_tasks 的任务

当我尝试调用任务 app_cant_find_tasks.tasks.test_task.delay() 时,当然 celery 会引发错误

如果我明确设置CELERY_IMPORTS = ("proj.app_cant_find_tasks.tasks",),Celery 可以从app_cant_find_tasks 找到任务

这些应用对我来说完全相似。我不明白为什么 celery 只能从一个应用程序自动发现任务。 问题是,我应该从哪里解决我的问题?

【问题讨论】:

    标签: django celery autodiscovery


    【解决方案1】:

    我遇到了类似的问题,就我而言,问题是我在其中一个应用程序中缺少 init.py 文件。

    【讨论】:

    • 我花了一些时间进行调试,然后才意识到这是我项目中的问题。这是一个非常微妙的错误,我很惊讶我的 Django 应用程序在其他方面运行良好。由于autodiscover_tasks 似乎默默地忽略了所有异常,我最终使用了一个我以前不得不依赖的技巧:将[n.name for n in apps.get_app_configs()] 的输出作为第一个参数复制粘贴到app.autodiscover_tasks(['proj.myapp1', .... 'proj.myapp432'),然后开始注释掉应用程序以查看哪个应用阻止从其他应用导入任务。
    • 就我而言,我只是在 django 的 settings.py 中的 INSTALLED_APPS 列表中重新排序我的应用程序
    猜你喜欢
    • 2018-04-13
    • 2018-11-20
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多