sql >> Base de Datos >  >> NoSQL >> Redis

DisabledBackend:Comportamiento errático con Celery, Redis y Flask

Entonces parece que necesito acceder a AsyncResult solo a través de mi instancia de la aplicación Celery, en lugar de a través de Celery, o pase la instancia de la aplicación Celery como argumento.

Entonces, esto no funciona:

from celery.result import AsyncResult

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

Esto funciona:

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

Esto también funciona:

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

Supongo que lo que sucede es que al llamar a AsyncResult directamente desde Celery, no accede a las configuraciones de Celery, por lo que cree que no hay un backend configurado para consultar los resultados.

Pero eso solo explicaría la falla completa de la función, y no el comportamiento errático. Supongo que esto se debe a diferentes subprocesos y situaciones en las que la instancia de la aplicación es importante, por lo que Celery la encuentra, aunque no estoy muy seguro.

Realicé un par de pruebas y parece que vuelve a funcionar bien después de cambiar el AsyncResult importado. , pero seguiré investigando.