Как установить бэкэнд для django-сельдерей. Я установил результат сельдерея BACKEND, но он не распознается

Я устанавливаю CELERY_RESULT_BACKEND = "amqp" в celeryconfig.py но я получаю:

>>> from tasks import add
>>> result = add.delay(3,5)
>>> result.ready()

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/result.py", line 105, in ready
    return self.state in self.backend.READY_STATES
  File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/result.py", line 184, in state
    return self.backend.get_status(self.task_id)
  File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/backends/base.py", line 414, in _is_disabled
    raise NotImplementedError("No result backend configured.  "
NotImplementedError: No result backend configured.  Please see the documentation for more information.

3 ответов


Я только что прошел через это, чтобы пролить свет на это. Можно было бы подумать, что для всей большой документации, заявляющей, что некоторые из них были бы немного более очевидными.

Я предполагаю, что у вас есть RabbitMQ и работает (он должен быть запущен), и что у вас есть dj-сельдерей установлен.

как только у вас есть это, все, что вам нужно сделать, это включить эту одну строку в свой setting.py файл.

BROKER_URL = "amqp://guest:guest@localhost:5672//"

тогда вам нужно запустить syncdb по работу, используя:

python manage.py celeryd -E -B --loglevel=info

на -E заявляет, что вы хотите, чтобы события были захвачены и -B состояния, которые вы хотите celerybeats работает. Первые позволяют вам фактически видеть что-то в окне администратора, а позже позволяет планировать. Наконец, вам нужно убедиться, что вы действительно собираетесь захватить события и статус. Поэтому в другом терминале запустите следующее:

./manage.py celerycam

а затем, наконец, вы сможете увидеть рабочий пример, приведенный в доктор.. -- Опять предполагая, что вы создали tasks.py то есть говорит.

>>> result = add.delay(4, 4)
>>> result.ready() # returns True if the task has finished processing.
False
>>> result.result # task is not ready, so no return value yet.
None
>>> result.get()   # Waits until the task is done and returns the retval.
8
>>> result.result # direct access to result, doesn't re-raise errors.
8
>>> result.successful() # returns True if the task didn't end in failure.
True

кроме того, вы можете просмотреть свой статус в панели администратора.

Django Task Manager

надеюсь, это поможет!! Я бы добавил еще одну вещь, которая помогла мне. просмотр файла журнала RabbitMQ был ключевым, поскольку он помог мне определить, что django-celery на самом деле разговаривал с RabbitMQ.


вы используете сельдерей django?

Если это так, вам нужно запустить оболочку python в контексте django (или любой технический термин).

тип:

python manage.py shell

и попробуйте свои команды из этой оболочки


привет пробовал все, чтобы работать сельдерей v3.1.25 с версией Django 1.8 ничего не получилось.. Наконец ниже линии помог мне ,чувствуя себя счастливым

app = Celery('documents',backend="celery.backends.amqp:AMQPBackend")
Setting backend="celery.backends.amqp:AMQPBackend"  fixed my error.