Redis
 sql >> база данни >  >> NoSQL >> Redis

DisabledBackend:Неправилно поведение с Celery, Redis и Flask

Така че изглежда, че трябва да осъществя достъп до AsyncResult само чрез моя екземпляр на приложението Celery, вместо чрез Celery, или предайте екземпляра на приложението Celery като аргумент.

Така че това не работи:

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 директно от Celery, той няма достъп до конфигурациите на Celery, следователно смята, че няма бекенд, конфигуриран за запитване на резултати.

Но това би обяснило само пълния отказ на функцията, а не хаотичното поведение. Предполагам, че това се дължи на различни теми и ситуации, в които екземплярът на приложението е важен, така че Celery го намира, но не е много сигурен.

Проведох няколко теста и изглежда отново работи добре след промяна на импортирания AsyncResult , но ще продължа да ровя.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis:Показва размера/размера на базата данни за ключовете

  2. Redis Sentinel

  3. Redis като база данни

  4. Миграции на данни с Redis

  5. Каква е целта на двоеточия в ключовете на Redis