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

Kru*_*kas 12 python django celery

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

app.autodiscover_tasks(settings.INSTALLED_APPS)
Run Code Online (Sandbox Code Playgroud)

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

app.autodiscover_tasks(settings.INSTALLED_APPS + ('apps.core','apps.sales'))
Run Code Online (Sandbox Code Playgroud)

找到了网站中定义的任务,但核心和销售中的任务却没有.所有都具有相同的布局apps.pytasks.py.

项目文件夹结构是:

apps
  core
  apps.py
  tasks.py
dashboard
  apps.py
sales
  apps.py
  tasks.py
websites
  apps.py
  tasks.py
Run Code Online (Sandbox Code Playgroud)

类定义如下:

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

class SalesConfig(AppConfig):
    name = 'apps.sales'
    verbose_name = 'Sales'
Run Code Online (Sandbox Code Playgroud)

Dod*_*die 20

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

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

from django.apps import apps
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])
Run Code Online (Sandbox Code Playgroud)

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

app.autodiscover_tasks()
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用 django 2.1 和 celery 4.2,仍然有这个问题,需要添加`get_app_configs` :( (2认同)