Redis
 sql >> Base de données >  >> NoSQL >> Redis

DisabledBackend :comportement erratique avec Celery, Redis et Flask

Il semble donc que j'ai besoin d'accéder à AsyncResult uniquement via mon instance d'application Celery, au lieu de via Celery, ou transmettez l'instance d'application Celery comme argument.

Donc, cela ne fonctionne pas :

from celery.result import AsyncResult

@app.route('/status/<task_id>')
def get_status(task_id):
    task = AsyncResult(task_id)
    return task.state

Cela fonctionne :

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

Cela fonctionne aussi :

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

Je suppose que ce qui se passe, c'est qu'en appelant AsyncResult directement depuis Celery, il n'accède pas aux configurations de Celery, il pense donc qu'il n'y a pas de backend configuré pour interroger les résultats.

Mais cela n'expliquerait qu'un échec complet de la fonction, et non le comportement erratique. Je suppose que c'est à cause de différents threads et de situations dans lesquelles l'instance de l'application est importante, donc Celery le trouve, mais pas trop sûr.

J'ai effectué quelques tests et semble fonctionner à nouveau correctement après avoir modifié le AsyncResult importé , mais je vais continuer à creuser.