16

プロジェクトでdjango-celeryを使用しようとしています

settings.pyにあります

CELERY_RESULT_BACKEND = "amqp"

サーバーは正常に起動しました

python manage.py celeryd --setting=settings

しかし、遅延したタスクの結果にアクセスしたい場合、次のエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready
    return self.status in self.backend.READY_STATES
  File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status
    return self.state
  File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state
    return self.backend.get_status(self.task_id)
  File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is
_disabled
    raise NotImplementedError("No result backend configured.  "
NotImplementedError: No result backend configured.  Please see the documentation
 for more information.

(同じセロリ設定で)celerydを実行すると、問題なく動作するため、非常に奇妙です。誰かが以前にこの問題に遭遇したことがありますか?

前もって感謝します!

4

6 に答える 6

6

セロリタスクが実行されたにもかかわらず、セロリタスクから結果を取得しているときに同じ問題が発生しました(コンソールログ)。私が見つけたのは、CELERY_RESULT_BACKEND = "redis"django settings.pyで同じ設定をしていましたが、tasks.pyでセロリをインスタンス化していたことです

celery = Celery('tasks', broker='redis://localhost')-これはsettings.pyプロパティをオーバーライドすると思われるため、結果を保存するために使用されるセロリインスタンスのバックエンドサーバーを構成していませんでした。

私はこれを削除し、djangoがsettings.pyからセロリを取得できるようにし、サンプルコードが機能しました。

于 2013-01-08T06:15:43.690 に答える
3

http://www.celeryproject.org/tutorials/first-steps-with-celery/からサンプルを実行しているだけの場合は、manage.py 経由でコンソールを実行する必要があります。

% python manage.py シェル

于 2012-06-01T17:35:40.977 に答える
2

私のように解決策を必死に探している人のために。

settings.pyスクリプトの最後に次の行を追加します。

djcelery.setup_loader()

django-celeryは、厳密な順序がないと独自の設定を考慮しないようです。

于 2015-11-25T23:51:54.933 に答える
1

私の場合、問題は CELERY_RESULT_BACKEND 引数をセロリ コンストラクターに渡していたことです。

Celery('proj',
         broker = 'amqp://guest:guest@localhost:5672//',
         CELERY_RESULT_BACKEND='amqp://',
         include=['proj.tasks'])

解決策は、代わりに backend 引数を使用することでした:

Celery('proj',
         broker = 'amqp://guest:guest@localhost:5672//',
         backend='amqp://',
         include=['proj.tasks'])
于 2016-06-04T15:15:52.120 に答える
0

設定を取得するために、コンソールに django 環境をセットアップする方法がいくつかあります。たとえば、PyCharm では、すべてが期待どおりに機能する django コンソールを実行できます。

于 2011-12-09T06:18:15.683 に答える
0

理解を深めるためにAMQP BACKEND SETTINGSを参照してください

注 AMQP バックエンドで結果を自動的に期限切れにするには、RabbitMQ 1.1.0 以降が必要です。古いバージョンの RabbitMQ を実行している場合は、次のように結果の有効期限を無効にする必要があります。 CELERY_TASK_RESULT_EXPIRES = None

以下の行を settings.py に追加してみてください:

CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

于 2015-11-30T19:18:56.547 に答える