2017-03-05 72 views
0

我正在關注here的教程,以獲取在我的django項目中定義的定期任務。Django-Celery:從另一個應用程序導入項目的celery.py文件

文章建議有celery.py文件的格式爲:

from celery import Celery 
    from celery.schedules import crontab 

    app = Celery() 

    @app.on_after_configure.connect 
    def setup_periodic_tasks(sender, **kwargs): 
      # Calls test('hello') every 10 seconds. 
      sender.add_periodic_task(10.0, my_task.s('hello'), name='add every 10') 
      ) 

    @app.task 
    def my_task(arg): 
      print(arg) 

其中工程。現在這很好,但我不想在本地定義我的任務。我的問題是,我如何從其他應用程序添加任務?

我創建了一個名爲my_proj的空白項目,它有兩個應用程序:my_projapp_with_tasks。上面的celery.py文件位於my_proj應用程序目錄的根級別,我想從app_with_taskstasks.py文件中添加週期性任務。

我確實在my_proj設置文件的Installed-apps中列出了app_with_tasks,但我仍然無法從應用程序導入任何內容到另一個應用程序。

我的理解是,我應該使用:

from app_with_tasks.tasks import task1 

my_proj然後將顯示PyCharm爲未解析的引用。

+0

你用來啓動芹菜服務器/守護進程的命令是什麼? – jperelli

+0

芹菜-A my_proj擊敗了,但我還沒有。我相信我錯過了一個微不足道的步驟,因爲我的項目文件中沒有任何地方可以從'app_with_tasks'應用程序導入任何東西。 – ShS

回答

1

我會告訴你我在用什麼。也許它可以幫助你

my_proj/celery.py

import os 
import celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_proj.settings') 

app = celery.Celery('app_django') 

app.config_from_object('django.conf.settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

然後在app_with_tasks,添加文件tasks.py

from my_proj.celery import app 
from django.apps import apps 

@app.task(bind=False) 
def your_task(some_arg): 
    A_Model = apps.get_model('my_proj', 'A_Model') 
    .... 

命令來啓動服務器芹菜(重新啓動此每次更改任務重新加載tasks.py文件)

/path/to/virtualenv/bin/celery --app=my_proj.celery:app --loglevel=INFO --concurrency=4 -n default_worker worker 

要調用任務(在這裏你應該使用你的add_perio dic_task code)

from app_with_tasks.tasks import your_task 
your_task.apply_async(args=[123], kwargs=None) 
+0

感謝您的支持。所以我認爲我會忽略Pycharm的警告並且無論如何都要運行芹菜捶打的東西,奇怪的是它確實像以前一樣擊敗了。所以我想這個問題並不是真正的問題。由於某種原因,Pycharm沒有認識到這一點。 – ShS

+0

我認爲重要的東西是'--app = my_proj.celery:app'和'autodiscover_tasks'。你需要告訴pycharms使用'my_proj.celery:app'。見http://stackoverflow.com/questions/37150910/how-can-i-use-pycharm-to-locally-debug-a-celery-worker – jperelli

+0

我實際上使用@shared_tasks這意味着我不需要綁定我的任務到應用程序實例(谷歌它) 就像我說的,我的問題不是真的與任務本身。 IDE不會識別'app_with_tasks'開始! – ShS

相關問題