Как мне запускать долгосрочные (бесконечные) процессы Python?

Недавно я начал экспериментировать с использованием Python для веб-разработки. До сих пор у меня был некоторый успех в использовании Apache с mod_wsgi и веб-фреймворка Django для Python 2.7. Однако я столкнулся с некоторыми проблемами, связанными с постоянным запуском процессов, обновлением информации и т. Д.

Я написал сценарий, который я называю «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

29
задан Hubro 31 December 2011 в 01:39
поделиться