Мы используем Celery с нашим веб-приложением Django для управления автономными задачами; некоторые из этих задач могут выполняться до 120 секунд.
Всякий раз, когда мы вносим какие-либо изменения в код, нам нужно перезапустить Celery, чтобы он перезагрузил новый код Python. Наше текущее решение состоит в том, чтобы отправить SIGTERM основному процессу Celery ( kill -s 15 `cat /var/run/celeryd.pid`
), затем подождать, пока он умрет, и перезапустить его ( python manage.py celeryd --pidfile=/var/run/celeryd.pid [...]
).
Из-за длительных задач это обычно означает, что отключение займет минуту или две, в течение которых новые задачи не обрабатываются, что вызывает заметную задержку для пользователей, которые в данный момент находятся на сайте.Я ищу способ сообщить Celery о завершении работы, но затем немедленно запустить новый экземпляр Celery, чтобы начать выполнение новых задач.
Вещи, которые не работали:
ОШИБКА: Pidfile (/var/run/celeryd.pid) уже существуют. Кажется, мы уже бежим? (PID: 13214)
и сразу умирает. (Это похоже на ошибку самого Celery; я сообщил им об этом.)