Redis
 sql >> Database >  >> NoSQL >> Redis

DisabledBackend:comportamento irregolare con sedano, Redis e boccetta

Quindi sembra che io debba accedere a AsyncResult solo tramite la mia istanza dell'app Celery, invece che tramite Celery, oppure passa l'istanza dell'app Celery come argomento.

Quindi, questo non funziona:

from celery.result import AsyncResult

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

Funziona:

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

Funziona anche questo:

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

Immagino che cosa accada chiamando AsyncResult direttamente da Celery, non accede alle configurazioni di Celery, quindi pensa che non ci sia un back-end configurato per interrogare i risultati.

Ma ciò spiegherebbe solo il completo fallimento della funzione e non il comportamento irregolare. Immagino che ciò sia dovuto a diversi thread e situazioni in cui l'istanza dell'app è importante, quindi Celery lo trova, anche se non troppo sicuro.

Ho eseguito un paio di test e sembra funzionare di nuovo bene dopo aver modificato il AsyncResult importato , ma continuerò a scavare.