Как устранить неполадку тайм-аута выхода celeryd при работе на Heroku (ошибка R12)?

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

Вот как я бегу из сельдерея из моего Procfile (через Джанго и Джанго-сельдерея):

celeryd: python manage.py celeryd -E --loglevel=INFO

Вот что я делаю, чтобы вызвать это:

> heroku ps:scale web=0 celeryd=0 --app myapp

И вот вывод журнала я получаю:

2012-09-07T12:56:31+00:00 heroku[celeryd.1]: State changed from up to down
2012-09-07T12:56:31+00:00 heroku[api]: Scale to celeryd=0, web=1 by mail@mydomain.com
2012-09-07T12:56:32+00:00 heroku[web.1]: State changed from up to down
2012-09-07T12:56:32+00:00 heroku[api]: Scale to web=0 by mail@mydomain.com
2012-09-07T12:56:34+00:00 heroku[celeryd.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:35+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:37+00:00 heroku[web.1]: Process exited with status 143
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Stopping remaining processes with SIGKILL
2012-09-07T12:56:45+00:00 heroku[celeryd.1]: Process exited with status 137

Изначально я испытал это на сельдерее 2.5.5. Сейчас я обновился до 3.0.9 и у меня все та же проблема.

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

Я не знаю, что еще проверить. Любая идея, как я могу решить эту проблему? Что может помешать Селериду ответить на SIGTERM Героку, когда задание уже выполнено?

2 ответа

Я сталкиваюсь с той же проблемой. Я не уверен, но это могло быть исправлено:

Работник с аргументом -B неправильно закрыл экземпляр ритма.

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

Это звучит для меня, как сельдерей не захватывает SIGTERM сигнал и реагируя на это, ожидая, пока SIGKILL прибывает.

Этот запрос извлечения может помочь вам: https://github.com/cybertoast/celery/commit/e9a007b982b0f9268174ae94b351a9275eaef4a3

Другие вопросы по тегам