Vì vậy, có vẻ như tôi cần truy cập AsyncResult
chỉ thông qua phiên bản ứng dụng Celery của tôi, thay vì thông qua Celery hoặc chuyển phiên bản ứng dụng Celery làm đối số.
Vì vậy, điều này không hoạt động:
from celery.result import AsyncResult
@app.route('/status/<task_id>')
def get_status(task_id):
task = AsyncResult(task_id)
return task.state
Điều này hoạt động:
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
Điều này cũng hoạt động:
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
Tôi đoán điều gì sẽ xảy ra bằng cách gọi AsyncResult
trực tiếp từ Celery, nó không truy cập vào cấu hình của Celery, do đó nó nghĩ rằng không có phần phụ trợ nào được định cấu hình để truy vấn kết quả.
Nhưng điều đó sẽ chỉ giải thích sự thất bại hoàn toàn của chức năng, chứ không phải hành vi thất thường. Tôi đoán điều này là do các chuỗi khác nhau và các tình huống trong đó phiên bản ứng dụng đang được coi trọng, vì vậy Celery tìm thấy nó, mặc dù không quá chắc chắn.
Tôi đã chạy một vài bài kiểm tra và dường như hoạt động tốt trở lại sau khi thay đổi AsyncResult
đã nhập , nhưng tôi sẽ tiếp tục đào.