20

これは私が実行しているコードです:

from __future__ import absolute_import
from celery import Celery
celery1 = Celery('celery',broker='amqp://',backend='amqp://',include=['tasks'])

celery1.conf.update(
   CELERY_TASK_RESULT_EXPIRES=3600,
       )
if __name__ == '__main__':
 celery1.start()

上記のコードを実行すると、次のエラーが表示されます。

   ImportError: cannot import name Celery
4

4 に答える 4

34

この同じエラーにも遭遇し、ファイルの名前を変更すると修正されました。

これに遭遇した他の人にとって、この問題が発生する理由は、実際のセロリパッケージの代わりにローカルのセロリ.pyがインポートされているため、Pythonがセロリ(大文字の「C」)を見つけることができない理由です。 celery パッケージですが、内部で Celery クラスが定義されていないローカルの celery.py である celery(小文字の "c") が見つかります。

ローカルの celery.py の名前を _celery.py に変更しましたが、celery.py 以外の名前で問題が解決するはずです。

編集:また、celery.pyファイルが置かれているディレクトリの外でセロリデーモンを呼び出すことも同様に機能することを言及するつもりでした。テスト目的では、ファイルの名前を変更するだけで十分ですが、ローカル ファイル名として celery.py を使用することもできます。たとえば、次のフォルダ構造があるとします。

+ルート/  
   - プロジェクト/  
     *セロリ.py  
     *タスク.py

ルート フォルダーからセロリを呼び出すと、次のように入力できるはずです。

celery worker --app=proj [optional args]

「-l info」オプションのログ引数を使用し、イントロ データのすぐ下にある [タスク] リストを表示して、タスクが存在することを確認できます。

詳細は、こちらのチュートリアル ドキュメントにあります: http://docs.celeryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument

于 2013-12-12T16:03:06.380 に答える