तो ऐसा लगता है कि मुझे AsyncResult
तक पहुंचने की आवश्यकता है सेलेरी के बजाय केवल मेरे सेलेरी ऐप इंस्टेंस के माध्यम से, या सेलेरी ऐप इंस्टेंस को तर्क के रूप में पास करें।
तो, यह काम नहीं करता:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
यह काम करता है:
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
यह भी काम करता है:
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
मैं अनुमान लगा रहा हूं कि क्या होता है AsyncResult
. पर कॉल करके सीधे सेलेरी से, यह सेलेरी के कॉन्फ़िगरेशन तक नहीं पहुंचता है, इसलिए यह सोचता है कि क्वेरी परिणामों के लिए कोई बैकएंड कॉन्फ़िगर नहीं किया गया है।
लेकिन यह केवल फ़ंक्शन की पूर्ण विफलता की व्याख्या करेगा, न कि अनिश्चित व्यवहार की। मुझे लगता है कि यह अलग-अलग थ्रेड्स और परिस्थितियों के कारण है जिसमें ऐप इंस्टेंस महत्वपूर्ण हो रहा है, इसलिए सेलेरी इसे ढूंढती है, हालांकि यह सुनिश्चित नहीं है।
मैंने कुछ परीक्षण चलाए हैं और लगता है कि आयातित AsyncResult
को बदलने के बाद फिर से ठीक काम कर रहा है , लेकिन मैं खुदाई करता रहूंगा।