Så det ser ud til, at jeg skal have adgang til AsyncResult
kun via min Celery-app-forekomst i stedet for gennem Celery, eller send Celery-appen som et argument.
Så dette virker ikke:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
Dette virker:
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
Dette virker også:
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
Jeg gætter på, at det, der sker, er ved at kalde AsyncResult
direkte fra Celery, får den ikke adgang til Celerys konfigurationer, og derfor mener den, at der ikke er nogen backend konfigureret til at forespørge resultater til.
Men det ville kun forklare fuldstændig fejl i funktionen, og ikke den uberegnelige adfærd. Jeg gætter på, at dette er på grund af forskellige tråde og situationer, hvor app-forekomsten er vigtig, så Selleri finder det, men ikke helt sikker.
Jeg har kørt et par test og ser ud til at fungere fint igen efter at have ændret det importerede AsyncResult
, men jeg bliver ved med at grave.