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