Можно ли перезапустить сервер разработки Django по сигналу?

Я хотел бы иметь возможность перезапустить команду manage.py runserver Django, используя сигнал (как в kill -HUP PID). Поддерживает ли Django вообще это? SIGHUP, SIGINT, SIGTERM просто выйдите из процесса.

Пробовал pkill -HUP, не получилось.

Можно ли перезапустить сервер разработки Django с помощью сигнала?

Короткий ответ - нет.

Более подробный ответ заключается в том, что Django сам по себе не имеет встроенной поддержки обработки сигналов POSIX (в частности, SIGHUP), поэтому поведение будет соответствовать поведению обработки сигналов Python по умолчанию.

(Сигналы Django - это совершенно другой механизм, который здесь не уместен.)

Альтернативы:

  • Самый простой способ перезапустить сервер разработки (т.е. manage.py runserver) - это прикоснуться к одному из исходных файлов вашего приложения.

  • В рабочей среде вы, как правило, запускаете несколько рабочих процессов django с сервера gunicorn. В этом случае вы можете по отдельности отключить рабочие процессы сигналом, и gunicorn восстановит их. В качестве альтернативы вы можете отправить сигнал HUP процессу gunicorn, и он запустит новых рабочих (с последним кодом / конфигурациями), а затем корректно завершит работу старых рабочих.

  • Я думаю, если бы вы были действительно предприимчивы, вы могли бы попробовать добавить обработчик сигналов Python для SIGHUP и попытаться заставить его перезапустить фреймворк django в процессе1.

Список использованной литературы:

<время работы/>

<поддержка>1 - Как? Я не знаю! Может быть, посмотрите, что делает механизм "перезапуска при изменении кода"? Надевай снаряжение искателя приключений, бери мачете и отправляйся в джунгли ...

Вернуться на верх