Написание демона в Python - хорошая идея? - PullRequest
18 голосов
/ 20 марта 2012

Мне нужно написать программу-демон, которая постоянно работает в фоновом режиме и выполняет несколько простых задач.Логика совсем не сложна, однако она должна работать в течение продолжительных периодов времени и быть стабильной.

Я думаю, что C ++ был бы хорошим выбором для написания такого рода приложений, однако я также рассматриваю Python, так как в нем легче написать и протестировать что-нибудь быстро.

Проблема, с которой я столкнулся с Python, заключается в том, что я не уверен, как его среда выполнения будет работать в течение продолжительных периодов времени.Может ли он поглотить все больше и больше памяти из-за некоторых причуд GC?Может ли он неожиданно рухнуть?Я никогда раньше не писал демонов на Python, поэтому, если кто-то здесь написал, поделитесь своим опытом.Спасибо!

Ответы [ 3 ]

14 голосов
/ 20 марта 2012

Я написал несколько демонов на Python для моей последней компании. Короткий ответ, это работает просто отлично. До тех пор, пока в самом коде нет какой-то огромной бомбы памяти, я никогда не видел постепенной деградации или скачка памяти. Будьте внимательны ко всему в глобальной или классовой области, потому что они будут жить, поэтому используйте del более свободно, чем обычно. В противном случае, как я уже сказал, никаких проблем я не могу сообщить лично.

И если вам интересно, они бегали месяцами и месяцами (скажем, обычно 6 месяцев) между обычными перезагрузками с нулевыми проблемами.

4 голосов
/ 20 марта 2012

Да, это может протечь.Да, это может неожиданно обрушиться.Все может.

Я бы сказал, что в среде с ручным управлением памятью (например, C ++) вероятность утечки гораздо выше, чем в Python.

Какдля неожиданного сбоя, вполне вероятно, что случайный кусок Python может быть более неожиданным, чем произвольный кусок Java, потому что последний получает выгоду от статической типизации , где вы можете поймать целую массу ошибок привремя компиляции, этот Python с уткой, набирающей и другими формами гибкости.

Реально, Python звучит совершенно разумным выбором для того, что вы хотите сделать.Взгляните на что-то вроде Twisted для приличного движка для построения вещей вокруг или, по крайней мере, для идеи структуры (ваш вопрос звучит как какое-то школьное задание, поэтому я не уверен, сколько свободыреализации вы получаете)

1 голос
/ 20 марта 2012

Я написал много вещей на C / C ++ и Perl, которые запускаются, когда LINUX box O.S. загружается с помощью rc.d.

Также я написал пару сценариев java и python, которые запускаются так же, как я упоминал выше, но мне понадобился небольшой shell-скрипт (файл .sh) для их запуска, и я использовал rc.5.

Позвольте мне сказать вам, что ваши опасения по поводу их среды выполнения полностью обоснованы, вам нужно быть осторожным с тем, какой уровень запуска вы будете использовать ... (только от rc.2 до rc.5, потому что rc.1 и 6 для Системы).

Если уровень запуска слишком низок, среда выполнения Python может не работать во время запуска вашей программы, и она может провалиться. например: на сервере LAMP MySQL и Apache запускаются в rc.3, где сеть уже доступна.

Я думаю, что ваш лучший выход - сделать ваш скрипт на python и запустить его, используя файл .sh из rc.5.

Удачи!

...