Сельдерей останавливается после нескольких часов простоя - PullRequest
0 голосов
/ 29 августа 2018

У меня есть приложение Flask, которое использует WSGI. Для нескольких задач я планирую использовать Celery с RabbitMQ. Но, как следует из названия, я столкнулся с проблемой, когда задачи Celery выполняются в течение нескольких минут, а затем после долгого бездействия они просто исчезают.

Конфигурация сельдерея:

CELERY_BROKER_URL='amqp://guest:guest@localhost:5672//'
BROKER_HEARTBEAT = 10 
BROKER_HEARTBEAT_CHECKRATE = 2.0
BROKER_POOL_LIMIT = None

Из этого вопроса я добавил BROKER_HEARTBEAT и BROKER_HEARTBEAT_CHECKRATE.

Я запускаю работника внутри venv с celery -A acmeapp.celery worker &, чтобы запустить его в фоновом режиме. И при проверке состояния в течение первых нескольких минут он показывает, что один узел подключен к сети, и выдает ответ OK. Но после нескольких часов простоя приложения, когда я проверяю статус Celery, оно показывает Error: No nodes replied within time constraint..

Я новичок в Сельдере и не знаю, что теперь делать.

1 Ответ

0 голосов
/ 05 сентября 2018

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

BROKER_CONNECTION_RETRY = True
BROKER_CONNECTION_MAX_RETRIES = 0

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

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

BROKER_CONNECTION_TIMEOUT = 120

Надеюсь, это поможет!

...