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.