2009-09-30 6 views
9

Mój zespół włącza środowisko wykonawcze Python 2.4.4 do naszego projektu, aby wykorzystać niektóre funkcje opracowane z zewnątrz.Wskazówki dotyczące optymalizacji środowiska wykonawczego Python dla systemów wbudowanych o niskich zasobach systemowych

Nasza platforma ma rdzeń aplikacji SH4 450Mhz i ograniczoną pamięć do wykorzystania przez środowisko wykonawcze i aplikacje Python.

Mamy przeniesiony Python, ale wstępne badania podkreślono następujące przeszkody:

a) czasy rozruchu na starcie Python może być tak źle, jak 25 sekund (przy importowaniu bibliotek zainteresowanych, az kolei ich zależności)

b) Python nigdy nie wydaje się, aby zwolnić pamięć do systemu operacyjnego podczas zbierania śmieci - jedyną możliwością jest, aby zamknąć czas pracy i restart (ponoszenia start-up opóźnień wskazano powyżej, które często razy jest niepraktyczne)

Jeśli złagodzimy te problemy, nasze użycie Pythona znacznie się poprawi. Wszelkie wskazówki od społeczności SO byłyby bardzo cenne. Zwłaszcza od każdego, kto ma wiedzę na temat tego, jak działa silnik wykonawczy Pythona.

Odpowiedz

5

Być może trudno w to uwierzyć, ale wersja CPython 2.4 never releases memory to the OS. To rzekomo zostało naprawione w wersji Python 2.5.

Ponadto poprawiono wydajność (w sensie procesora) w Pythonie 2.5 i Pythonie 2.6.

Zobacz C API section in What's new in Python 2.5, poszukaj elementu zwanego łata Evan Jones do obmalloc

Alex Martelli (którego rada zawsze należy przynajmniej rozważyć), says multiprocess is the only way to go to free memory. Jeśli nie można używać multiprocessing (moduł w Pythonie 2.6), os.fork jest co najmniej dostępna. Korzystanie z os.fork w najbardziej prymitywny sposób (rozwidlenie jednego procesu pracy na początku, oczekiwanie na zakończenie, rozwidlenie nowego ...) jest nadal lepsze niż tłumacza tłumaczącego, płacącego za to 25 sekund.

+0

Postaramy się przejść do wersji Python 2.6, a także zastosować łatę i wkrótce złożyć raport na temat wyniku. Dzięki. Wszelkie pomysły dotyczące optymalizacji funkcji importowania i inicjalizacji modułów również byłyby wspaniałe, jeśli masz jakiekolwiek spostrzeżenia na temat tego frontu, chociaż podejrzewam, że jest to bardzo zależne od natury ładowanych przez nas modułów - które są zbyt liczne, aby je wyświetlić. . – sototozo

+0

gdybym mógł, oddałbym repa za nagrodę za to pytanie. – u0b34a0f6ae