Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

DisabledBackend:Comportamento Errático com Aipo, Redis e Frasco


Então parece que eu preciso acessar AsyncResult apenas por meio da minha instância do aplicativo Celery, em vez de por meio do Celery, ou passe a instância do aplicativo Celery como um argumento.

Então, isso não funciona:
from celery.result import AsyncResult

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

Isso 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

Isso também 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

Acho que o que acontece é que, ao chamar AsyncResult diretamente do Celery, ele não acessa as configurações do Celery, portanto, pensa que não há back-end configurado para consultar os resultados.

Mas isso só explicaria a falha completa da função, e não o comportamento errático. Eu estou supondo que isso é por causa de diferentes threads e situações em que a instância do aplicativo está sendo importante, então Celery a encontra, embora não tenha muita certeza.

Eu executei alguns testes e parece estar funcionando bem novamente depois de alterar o AsyncResult importado , mas vou continuar cavando.