Redis
 sql >> Datenbank >  >> NoSQL >> Redis

DisabledBackend:Unregelmäßiges Verhalten mit Celery, Redis &Flask

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.