2012-03-19 11 views
18

Muszę napisać program demonów, który stale działa w tle i wykonuje proste zadania. Logika nie jest wcale skomplikowana, jednak musi działać przez dłuższy czas i być stabilna.Czy pisanie daemona w Pythonie jest dobrym pomysłem?

Myślę, że C++ stanowiłoby dobry wybór do pisania tego rodzaju aplikacji, jednak rozważam także Python, ponieważ łatwiej jest w nim napisać i przetestować coś szybko.

Problem, który mam z Pythonem, polega na tym, że nie jestem pewien, jak będzie zachowywać się środowisko uruchomieniowe przez dłuższy czas. Czy może pochłaniać coraz więcej pamięci z powodu dziwactw GC? Czy może niespodziewanie się zawiesić? Nigdy wcześniej nie pisałem demonów w Pythonie, więc jeśli ktoś tutaj to zrobił, podziel się swoim doświadczeniem. Dzięki!

+4

Może się to przydać: http://pypi.python.org/pypi/python-daemon/ (nigdy go nie używał). –

Odpowiedz

14

Napisałem kilka demonów w Pythonie dla mojej ostatniej firmy. Krótka odpowiedź brzmi: działa dobrze. Dopóki sam kod nie zawiera jakiejś ogromnej bomby pamięci, nigdy nie widziałem żadnej stopniowej degradacji ani utraty pamięci. Uważaj na wszystko w zakresach globalnym lub klasowym, ponieważ one będą żyć, więc używaj bardziej liberalnie niż normalnie. W przeciwnym razie, tak jak powiedziałem, nie mogę zgłaszać żadnych problemów.

W przypadku, gdy zastanawiacie się, oni biegli przez miesiące i miesiące (powiedzmy 6 miesięcy zwykle) pomiędzy rutynowymi restartami z zerowymi problemami.

+0

jakiej biblioteki używasz dla tych demonów? python-daemon? daemonize? – Zaroth

+0

@Zaroth bez biblioteki, tylko standardowe podwójne rozwidlenie. –

4

Tak, może przeciekać. Tak, może niespodziewanie się zawiesić. Wszystko może.

Powiedziałbym, że prawdopodobieństwo wycieku w środowisku z ręcznym zarządzaniem pamięcią (np. C++) jest znacznie większe niż w przypadku Pythona.

chodzi o niespodziewanie upaść, dobrze, są szanse, dowolna bryła Python może być bardziej prawdopodobne, aby niespodziewanie upaść niż dowolnej bryły Java, ponieważ te ostatnie korzyści z static typing gdzie można złapać cały ciężar błędów w czasie kompilacji , Python z jego duck typing i innymi formami elastyczności.

Realistycznie, Python wydaje się idealnym wyborem dla tego, co chcesz robić. Spójrz na coś takiego, jak Twisted, aby uzyskać porządny silnik do budowania rzeczy lub przynajmniej na temat struktury (twoje pytanie brzmi jak jakieś zadanie szkolne, więc nie jestem pewien, ile masz swobody implementacji)

+1

Twisted jest naprawdę bardziej strukturą sieciową, OP nigdy nie powiedział, że to demon sieciowy. –

+3

Python jest silnie wpisany na klawiaturze i wpisany na kaczkę – wim

+1

@Chris: Jasny punkt, chociaż kiedy myślę o Twisted, myślę raczej o "opartej na zdarzeniach" niż o sieci, co uważam za dobry model dla każdego rodzaju demona –

1

Napisałem wiele rzeczy w C/C++ i Perlu, które są inicjowane, gdy system operacyjny LINUX buty, uruchamiając je za pomocą rc.d.

Napisałem również kilka skryptów Java i Pythona, które są uruchamiane w ten sam sposób, o którym wspomniałem powyżej, ale potrzebowałem trochę skryptu powłoki (pliku .sh) do ich uruchomienia i użyłem rc.5 .

Pozwolę sobie powiedzieć, że twoje obawy dotyczące środowiska uruchomieniowego są całkowicie poprawne, będziesz musiał uważać na który poziom uruchamiania użyjesz ... (tylko od rc.2 do rc.5, ponieważ rc.1 i rc.6 są dla systemu).

Jeśli poziom pracy jest zbyt niski, środowisko uruchomieniowe Pythona może nie być uruchomione w momencie uruchamiania programu i może na nim występować flop. np .: W serwerze LAMP MySQL i Apache są uruchamiane w rc.3, gdzie sieć jest już dostępna.

Myślę, że najlepszym wyjściem jest zrobienie skryptu w pythonie i uruchomienie go przy użyciu pliku .sh z rc.5.

Powodzenia!

+0

Czym dokładnie są poziomy RC.x? – Finglas

+1

Może to być przydatne: http://www.networkclue.com/os/Linux/run-levels.aspx –

+0

@Finglas Możesz zapytać o to na http://unix.stackexchange.com –

Powiązane problemy