2016-05-23 37 views
2

如何从项目级调用芹菜(app)任务,反之亦然。如何在Django中跨应用程序/项目注册芹菜任务?

我有这样一个Django目录结构:

- proj 
    |_ celery.py 
    |_ settings.py 
- app 
    |_ tasks.py 
    |_ views.py 

在settings.py我有CELERYBEAT_SCHEDULE变种,其指的是在shared_task app/tasks。此任务未在celery inspect registered中列出。

无论是apps/views.py任务其中是注册表中列出因为他们在proj/celery.py被定义,通过函数调用。

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

回答

2

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

app/apps.py导入你的任务,像这样:

from .tasks import add 

app/tasks.py进口shared_task像这样:

from proj.celery import shared_task 

proj/celery.py进口shared_task像这样:

import celery 
from celery import shared_task 

Pycharm会抱怨关于未使用的进口,ho无论他们是用什么,只是不在文件pycharm解析。

现在,当我开始芹菜工作者,如:

python manage.py celeryd --loglevel=DEBUG & 

而不是

celery -A pears worker --loglevel=info & 

我在app/tasks.py任务是注册和调用。

+0

根据您的芹菜“app.autodiscover_tasks”设置的不同,您的使用情况可能会有所不同。这个答案假设你正在使用“lambda:settings.INSTALLED_APPS”和'INSTALLED_APPS = ['app.apps.AppConfig',...]'这是写作时的默认值。 – J0hnG4lt

+1

我想这是最好的答案http://stackoverflow.com/a/38836969/3061689 – eddwinpaz