Как правильно настроить и запустить удаленного работника сельдерея? - PullRequest
1 голос
/ 01 ноября 2011

Я новичок в сельдерее и, возможно, делаю что-то не так, но я уже провел много попыток выяснить, как настроить сельдерей правильно.

Итак, в моей среде у меня есть 2 удаленных сервера; один главный (он имеет публичный IP-адрес и большинство таких вещей, как сервер базы данных, rabbitmq сервер и веб-сервер, на котором запущено мое веб-приложение) и другой используется для конкретных задач, которые я хочу вызвать из асинхронно основной сервер с использованием сельдерея.

Я планировал использовать RabbitMQ в качестве брокера и в качестве бэк-энда результатов. Конфигурация сельдерея очень проста:

CELERY_IMPORTS = ("main.tasks", ) 
BROKER_HOST = "Public IP of my main server" 
BROKER_PORT = 5672 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 
CELERY_RESULT_BACKEND = "amqp" 

Когда я запускаю работника на главном сервере, задачи выполняются просто хорошо, но когда я запускаю его на удаленном сервере только несколько задач выполняются, а затем работник застревает не в состоянии выполнить любой задача. Когда я перезагружаю работника, он выполняет еще несколько задач и получает застрял снова. Там нет ничего особенного в задаче, и я даже пытался тестовое задание, которое просто добавляет 2 числа. Я пытался запустить рабочий по-разному (демонизировать и нет, устанавливая другой параллелизм и используя celeryd_multi), ничего не помогло.

В чем может быть причина? Я что-то пропустил? Должен ли я бежать что-то на главном сервере, кроме брокера (RabbitMQ)? Или это ошибка в сельдерее (я пробовал несколько версий: 2.2.4, 2.3.3 и dev, но никто из них не работал)?

Хм ... Я только что воспроизвел ту же проблему на местном работнике, поэтому я не знаю, что это такое ... Требуется ли перезагрузить сельдерей? рабочий после каждого N выполненных задач?

Любая помощь будет очень ценится:)

Ответы [ 2 ]

1 голос
/ 11 августа 2012

Не знаю, удалось ли вам решить проблему, но у меня были похожие симптомы.Оказалось, что (по какой-то причине) операторы печати изнутри задач приводили к тому, что задачи не завершались (может быть, какая-то тупиковая ситуация?).Только некоторые задачи имели операторы печати, поэтому, когда эти задачи выполнялись, в конечном итоге количество рабочих (заданных параметром параллелизма) было исчерпано, что привело к прекращению выполнения задач.

0 голосов
/ 12 февраля 2019

Попробуйте установить конфигурацию сельдерея на

CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_MAX_TASKS_PER_CHILD = 1

* документы 1005 *

...