2012-03-19 2 views
18

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

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

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

+4

Это может оказаться полезным: http://pypi.python.org/pypi/python-daemon/ (никогда не использовал его). –

ответ

14

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

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

+0

какую библиотеку вы использовали для этих демонов? питон-демон? демон? – Zaroth

+0

@ Zaroth нет библиотеки, просто стандартная двойная вилка. –

4

Да, это может привести к утечке. Да, это может неожиданно сбой. Все может.

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

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

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

+1

Twisted действительно больше сетевой инфраструктуры, OP никогда не говорил, что это был сетевой демон. –

+3

Python строго типизирован и утка напечатана – wim

+1

@ Крис: Справедливая точка, хотя, когда я думаю о Twisted, я думаю больше о «основанной на событиях», чем я занимаюсь сетью, которую я считаю хорошей моделью для любого типа демонов –

1

Я написал много вещей в C/C++ и Perl, которые инициируются, когда ОС Windows LINUX boots, запуская их с помощью rc.d.

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

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

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

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

Удачи вам!

+0

Что такое уровни RC.x? – Finglas

+1

Это может быть полезно: http://www.networkclue.com/os/Linux/run-levels.aspx –

+0

@Finglas Вы можете узнать об этом на http://unix.stackexchange.com –

Смежные вопросы