Недавно я начал экспериментировать с использованием Python для веб-разработки. До сих пор я имел успех с помощью Apache с mod_wsgi и веб-картой Django для Python 2.7. Однако я столкнулся с некоторыми проблемами с постоянно работающими процессами, обновлением информации и т.д.
Я написал script я вызываю "daemonManager.py", который может запускать и останавливать все или отдельные петли обновления python (Должен ли я назвать их демонами?). Он делает это путем разметки, затем загружает модуль для выполнения определенных функций и запускает бесконечный цикл. Он сохраняет PID файл в /var/run
, чтобы отслеживать процесс. Все идет нормально. Проблемы, с которыми я столкнулся, следующие:
-
Время от времени один из процессов просто прекратится. Я проверяю
ps
утром, и процесс просто исчез. Ошибок не было зарегистрировано (я использую модульlogging
), и я рассказываю обо всех исключениях, о которых я могу думать и регистрировать их. Также я не думаю, что эти процессы выхода имеют какое-то отношение к моему коду, потому что все мои процессы запускают совершенно другой код и выходят с довольно похожими интервалами. Конечно, я ошибаюсь. Нормально ли, что процессы Python просто умирают после того, как они работают в течение нескольких дней/недель? Как мне решить эту проблему? Должен ли я написать еще один демон, который периодически проверяет, продолжают ли другие демоны? Что делать, если этот демон останавливается? Я не понимаю, как с этим справиться. -
Как я могу программно узнать, работает ли процесс еще или нет? Я сохраняю файлы PID в
/var/run
и проверяю, существует ли файл PID для определения того, запущен ли процесс. Но если процесс просто умирает из-за неожиданных причин, PID файл останется. Поэтому я должен удалять эти файлы каждый раз, когда процесс выходит из строя (пару раз в неделю), какой вид поражения цели. Наверное, я могу проверить, работает ли процесс в PID в файле, но что, если начался другой процесс и был назначен PID мертвого процесса? Мой демон подумал бы, что процесс работает нормально, даже если он давно мертв. Снова я не понимаю, как с этим бороться.
Любой полезный ответ о том, как лучший запускать бесконечные процессы Python, надеюсь, также пролить свет на вышеупомянутые проблемы, я буду принимать
Я использую Apache 2.2.14 на машине Ubuntu.
Моя версия Python - 2.7.2