Zdá se tedy, že potřebuji získat přístup k AsyncResult
pouze prostřednictvím mé instance aplikace Celery namísto přes Celery, nebo předat instanci aplikace Celery jako argument.
Takže tohle nefunguje:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
Toto funguje:
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
Toto také funguje:
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
Hádám, že se to stane voláním AsyncResult
přímo z Celery, nemá přístup ke konfiguracím Celery, a proto si myslí, že neexistuje žádný backend nakonfigurovaný k dotazování na výsledky.
To by ale vysvětlovalo pouze úplné selhání funkce, nikoli nevyzpytatelné chování. Hádám, že je to kvůli různým vláknům a situacím, ve kterých je instance aplikace důležitá, takže to Celery zjistí, i když si to není příliš jistý.
Provedl jsem několik testů a zdá se, že po změně importovaného AsyncResult
opět funguje dobře , ale budu kopat dál.