Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

DisabledBackend:Hành vi bất thường với Celery, Redis &Flask

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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. PooledRedisClientManager không giải phóng kết nối

  2. Node.js - Phiên không tồn tại thông qua res.redirect ()

  3. Tại sao Travis không thể kết nối sử dụng Redis cache_store khi triển khai cho Heroku?

  4. Cách sử dụng Redis Connection Pool trong Python đúng cách

  5. Các phím sắp xếp của Spring Redis