2016-04-20 6 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を実行していませんでした。今、私はセロリのタスクのすべての作品を実行すると

python -m cive.framework.tasks 

:ソリューションは、パッケージ(タスクの後に何の.pyはありません注意してください)としてのpythonを実行している、あなたのルートプロジェクトディレクトリの外にcd'ingされます。

関連する問題