Сельдерей с 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
Почему это не работает?
Ответы
Ответ 1
Просто продолжайте читать учебник. Это будет объяснено в главе Keep Results.
Чтобы запустить сельдерей, вам нужно предоставить только параметр брокера, который необходим для отправки сообщений о задачах. Если вы хотите получить информацию о состоянии и результатах, возвращаемых готовыми задачами, вам нужно установить параметр backend. Полный список можно найти в Документация по конфигурации: CELERY_RESULT_BACKEND.
Ответ 2
Предлагаю взглянуть на:
http://www.cnblogs.com/fangwenyu/p/3625830.html
Там вы увидите, что
вместо
app = Celery('tasks', broker='amqp://[email protected]//')
вы должны писать
app = Celery('tasks', backend='amqp', broker='amqp://[email protected]//')
Это он.
Ответ 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 в качестве бэкэнд для хранения сообщений в очереди.