Celery autodiscover_tasks不适用于所有Django 1.7应用程序

时间:2015-02-20 12:19:54

标签: python django celery

我在Celery 3.1上有一个Django 1.7项目。我的Django项目中的所有应用程序都使用新的AppConfig。问题是并非autodiscover_tasks找到了所有任务:

app.autodiscover_tasks(settings.INSTALLED_APPS)

如果我使用这样的autodiscover_tasks,它将会工作:

app.autodiscover_tasks(settings.INSTALLED_APPS + ('apps.core','apps.sales'))

找到网站中定义的任务,但核心和销售中的任务不是。所有版面都与apps.pytasks.py具有相同的布局。

项目文件夹结构为:

apps
  core
  apps.py
  tasks.py
dashboard
  apps.py
sales
  apps.py
  tasks.py
websites
  apps.py
  tasks.py

类定义如下:

class WebsitesConfig(AppConfig):
    name = 'apps.websites'
    verbose_name = 'Websites'

class SalesConfig(AppConfig):
    name = 'apps.sales'
    verbose_name = 'Sales'

4 个答案:

答案 0 :(得分:19)

许多芹菜问题都在讨论这个问题,例如#2596#2597

如果您使用的是Celery 3.x,则修复方法是使用:

from django.apps import apps
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])

#3341中所述,如果您使用的是Celery 4.x(即将发布),您可以使用:

app.autodiscover_tasks()

答案 1 :(得分:2)

由于虚拟环境配置错误,我遇到了这个问题。

如果已安装的应用程序在您运行芹菜的虚拟环境中缺少依赖关系,则不会自动发现已安装应用程序的任务。当我从在同一台机器上运行我的Web服务器和芹菜到分布式解决方案时,这让我感到震惊。错误的构建导致不同节点上的不同环境文件。

我添加了缺少的依赖项,然后重新启动了芹菜服务。

答案 2 :(得分:0)

我必须将其添加到定义我的芹菜应用程序的模块中:

from __future__ import absolute_import

答案 3 :(得分:0)

我的问题是在celery命令中通往@Bean @RequestScope public Supplier<String> auditIdSupplier() { String val = String.join("-","KEY",UUID.randomUUID().toString()); return () -> val; } 的路径错误。 该命令应该是这样的:

celery.py

芹菜celery worker -A <project_name.celery_app_module> -l info 像这样:

celery_app_module