2016-05-23 55 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

相關問題