2013-10-09 5 views
0

Почти точный дубликат this SO question, но ответ мне не помогает. Я установил Erlang, Celery и RabbitMQ и создал сельдерей для использования AMQP в качестве бэкэнд-брокер. Я следил за quickstart example (создайте задачу, которая добавляет два числа вместе), но когда я получаю команду result.ready(), процесс Celery просто зависает.Сельдерей висит на готовом()

  • Это не проблема аутентификации (четверной проверены и испытаны недопустимые логины)
  • Это не из дискового пространства ошибки, как и в предыдущий SO вопрос (> 800mb бесплатно)
  • работник и работает ("потребитель: Готов принять задачи!")
  • Музейный запущена и работает ("брокерский бег")
  • можно увидеть сельдерей подключение к RabbitMQ ("прием AMQP соединения (IP -> IP)")
  • Я думаю, что это вопрос моего сценария на Python, а не con правильно отрегулировать рабочий процесс Сельдерей. Может быть, потому, что я пытаюсь запустить это на малиновой пи? В доступной памяти ОС очень низка.

Я разорву свои волосы здесь. Любая помощь приветствуется!

+0

Действительно ли пользователь начинает выполнение задачи? Висит ли это, когда вы пытаетесь получить результат после выполнения задачи, или потребитель вообще не получает эту задачу? – Clara

+0

Нет, потребитель (работник) вообще не получает задание, что, я думаю, указывает на ошибку связи в брокере. Использование того же кода с Redis вместо RabbitMQ работает немедленно, поэтому это не проблема с кодом. – keithl8041

+0

Пробовал ли вы перечислить содержимое очереди с помощью: quewnmqadmin list queues ->, чтобы узнать, находятся ли сообщения в ваших очередях? Если они не дойдут до вашего потребителя, а издатель опубликовал их, они все равно должны быть видны в очередях при перечислении очередей. – Clara

ответ

0

После многих проб и ошибок я обнаружил, что добавление следующего в мой celeryconfig.py привело к вызову ready(), возвращающему True. Возможно, это не идеальное решение, но, по крайней мере, одно, которое заставляет процесс застревать и возвращает правильное значение.

CELERY_ALWAYS_EAGER = True 

Перед применением этого метода обхода (не истинное решение, в моих глазах) вы, вероятно, следует читать docs, чтобы убедиться, что вы понимаете, что это делает;

... tasks will be executed locally instead of being sent to the queue.

Какого вида отрицает причину использования сельдерея в первую очередь, так что в конце концов я сдался и использовал Redis вместо AMQP. Работает как шарм.

Смежные вопросы