Подтвердить что ты не робот

Сельдерей с RabbitMQ: AttributeError: объект 'DisabledBackend' не имеет атрибута '_get_task_meta_for'

Я запускаю Первые шаги с учебником по сельдерею.

Определим следующую задачу:

from celery import Celery

app = Celery('tasks', broker='amqp://[email protected]//')

@app.task
def add(x, y):
    return x + y

Затем назовите его:

>>> from tasks import add
>>> add.delay(4, 4)

Но я получаю следующую ошибку:

AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'

Я работаю как с сельдером, так и с сервером rabbit-mq. Скорее странно, работник сельдерея сообщает, что задача преуспевает:

[2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19 

Почему это не работает?

4b9b3361

Ответ 1

Просто продолжайте читать учебник. Это будет объяснено в главе Keep Results.

Чтобы запустить сельдерей, вам нужно предоставить только параметр брокера, который необходим для отправки сообщений о задачах. Если вы хотите получить информацию о состоянии и результатах, возвращаемых готовыми задачами, вам нужно установить параметр backend. Полный список можно найти в Документация по конфигурации: CELERY_RESULT_BACKEND.

Ответ 3

В случае, если кто-то сделал так же легко сделать ошибку, как и я: Учебник не говорит об этом явно, но строка

app = Celery('tasks', backend='rpc://', broker='amqp://')

- это EDIT строки в вашем файле tasks.py. Мой сейчас читает:

app = Celery('tasks', backend='rpc://', broker='amqp://[email protected]//')

Когда я запускаю python из командной строки, я получаю:

$ python
>>> from tasks import add
>>> result = add.delay(4,50)
>>> result.ready()
>>> False

Все учебники должны быть легко следовать, даже когда немного пьяны. Пока это не доходит до этого бара.

Ответ 4

в каталоге проекта найдите файл настроек.

затем: sudo vim settings.py скопируйте/вставьте в settings.py: CELERY_RESULT_BACKEND = 'djcelery.backends.database: DatabaseBackend'

Примечание: это если вы используете django-celery в качестве бэкэнд для хранения сообщений в очереди.