Så det verkar som att jag behöver komma åt AsyncResult
endast via min Celery-app-instans, istället för genom Celery, eller skicka Celery-appen som ett argument.
Så det här fungerar inte:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
Detta fungerar:
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
Detta fungerar också:
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
Jag gissar att det som händer är att genom att anropa AsyncResult
direkt från Celery har den inte åtkomst till Celerys konfigurationer, därför tror den att det inte finns någon backend konfigurerad för att söka efter resultat.
Men det skulle bara förklara fullständigt fel i funktionen, och inte det oberäkneliga beteendet. Jag antar att detta beror på olika trådar och situationer där appinstansen är viktig, så Celery hittar det, men inte så säker.
Jag har kört ett par tester och verkar fungera bra igen efter att ha ändrat det importerade AsyncResult
, men jag fortsätter att gräva.