2016-04-20 99 views
0

我正在頭痛的讓芹菜與我的文件夾結構一起工作。注意我使用的是virtualenv,但它應該沒關係。芹菜中未註冊的任務類型導入錯誤

cive/
    celery_app.py 
    __init__.py 
    venv 
    framework/
     tasks.py 
     __init__.py 
     civeAPI/
      files tasks.py need 

cive是我的根項目文件夾。

celery_app.py:

from __future__ import absolute_import 

from celery import Celery 

app = Celery('cive', 
     broker='amqp://', 
     backend='amqp://', 
     include=['cive.framework.tasks']) 

# Optional configuration, see the application user guide. 
app.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600, 
) 

if __name__ == '__main__': 
    app.start() 

tasks.py(簡體)

from __future__ import absolute_import 
#import other things 
#append syspaths 
from cive.celery_app import app 

@app.task(ignore_result=False) 
def start(X): 
    # do things 

def output(X): 
    # output files 

def main(): 
    for d in Ds: 
     m = [] 
     m.append(start.delay(X)) 
     output([n.get() for n in m]) 

if __name__ == '__main__': 
    sys.exit(main(sys.argv[1:])) 

然後我通過(外根cive DIR)開始工人

celery -A cive worker --app=cive.celery_app:app -l info 

這似乎工作罰款,加載工人和顯示

[tasks] 
    . cive.framework.tasks.start_sessions 

但是當我嘗試通過其他終端來運行我的tasks.py:

python tasks.py 

我得到的錯誤:

Traceback (most recent call last): 
    File "tasks.py", line 29, in <module> 
    from cive.celery_app import app 
ImportError: No module named cive.celery_app 

如果我進口重命名爲:

from celery_app import app #without the cive.celery_app 

我最終可以啓動腳本,但芹菜返回錯誤:

Received unregistered task of type 'cive.start_sessions' 

我認爲我的進口或配置有問題,但我不能說什麼。

回答

0

所以這是一個python包問題,不是一個芹菜問題。我通過查看How to fix "Attempted relative import in non-package" even with __init__.py找到了解決方案。

我從來沒有想過這個,但我沒有在包模式下運行python。該解決方案cd'ing你的根項目目錄,然後運行Python作爲一包(注意,是任務之後沒有的.py):

python -m cive.framework.tasks 

現在,當我運行芹菜工作一切正常。