Es scheint also, dass ich auf AsyncResult
zugreifen muss nur über meine Celery-App-Instanz, anstatt über Celery, oder übergeben Sie die Celery-App-Instanz als Argument.
Das funktioniert also nicht:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
Das funktioniert:
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
Das geht auch:
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
Ich vermute, was passiert, ist das durch Aufrufen von AsyncResult
direkt von Celery, greift es nicht auf die Konfigurationen von Celery zu, daher denkt es, dass kein Backend konfiguriert ist, um Ergebnisse abzufragen.
Das würde aber nur den kompletten Ausfall der Funktion erklären, nicht das sprunghafte Verhalten. Ich vermute, das liegt an verschiedenen Threads und Situationen, in denen die App-Instanz wichtig ist, also findet Celery sie, ist sich aber nicht sicher.
Ich habe ein paar Tests durchgeführt und scheint wieder gut zu funktionieren, nachdem ich das importierte AsyncResult
geändert habe , aber ich werde weiter graben.