如何在 Django 中跨应用程序/项目注册 celery 任务?

J0h*_*4lt 5 django celery pycharm

如何从项目级别调用 celery(应用程序)任务,反之亦然。

我有一个 Django 目录结构,如下所示:

- proj
     |_ celery.py
     |_ settings.py
- app
     |_ tasks.py
     |_ views.py
Run Code Online (Sandbox Code Playgroud)

在 settings.py 中,我有一个 CELERYBEAT_SCHEDULE var,它引用app/tasks. 该任务未在 中列出celery inspect registered

自从在 中定义以来在注册表中列出任务也不能proj/celery.py由 中的函数调用apps/views.py

我已按照芹菜网站上的说明进行操作。

J0h*_*4lt 5

Shared_task 装饰器中的函数必须在应用程序 AppConfig 中列出。

app/apps.py导入您的任务时,如下所示:

from .tasks import add
Run Code Online (Sandbox Code Playgroud)

app/tasks.py导入共享任务中,如下所示:

from proj.celery import shared_task
Run Code Online (Sandbox Code Playgroud)

proj/celery.py导入共享任务中,如下所示:

import celery
from celery import shared_task
Run Code Online (Sandbox Code Playgroud)

Pycharm 会抱怨未使用的导入,无论它们如何使用,只是不在 pycharm 正在解析的文件中。

现在,当我开始芹菜工人时:

python manage.py celeryd --loglevel=DEBUG &
Run Code Online (Sandbox Code Playgroud)

而不是

celery -A pears worker --loglevel=info &
Run Code Online (Sandbox Code Playgroud)

我的任务app/tasks.py已注册且可调用。

  • 我想这是最好的答案http://stackoverflow.com/a/38836969/3061689 (3认同)