したがって、AsyncResult
にアクセスする必要があるようです。 Celeryではなく、Celeryアプリインスタンスを介してのみ、またはCeleryアプリインスタンスを引数として渡します。
したがって、これは機能しません:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
これは機能します:
from app import my_celery # Your own Celery Application Instance
@app.route('/status/<task_id>')
def get_status(task_id):
task = my_celery.AsyncResult(task_id)
return task.state
これも機能します:
from app import my_celery
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id, app=my_celery)
return task.state
AsyncResult
を呼び出すことで何が起こるかを推測しています Celeryから直接、Celeryの構成にアクセスしないため、結果を照会するように構成されたバックエンドがないと見なされます。
しかし、それは関数の完全な失敗を説明するだけであり、不安定な動作を説明するものではありません。これは、さまざまなスレッドと、アプリインスタンスが重要である状況が原因であると推測します。そのため、Celeryはそれを見つけますが、あまり確かではありません。
いくつかのテストを実行しましたが、インポートされたAsyncResult
を変更した後、再び正常に機能しているようです。 、でも掘り続けます。