2009-09-30 4 views
9

私のチームは、外部で開発された機能を活用するためにPython 2.4.4ランタイムをプロジェクトに組み込んでいます。システムリソースの少ない組み込みシステム用のPythonランタイムを最適化するためのガイダンス

私たちのプラットフォームには、450MhzのSH4アプリケーションコアと、Pythonランタイムとアプリケーションで使用するための限られたメモリがあります。

我々は、Pythonを移植しましたが、最初のテストは、次のハードルを強調しました:関係のライブラリをインポートするときに(Pythonランタイム用

a)の起動時間は25秒ほど悪くすることができ、ひいてはその依存関係)

b)はPythonのガベージコレクションの際にOSにメモリを解放するように思われることはありません - 唯一の頼みの綱は、しばしば非現実的である、上記の起動遅延を被る(ランタイムおよび再起動を閉じることである)

にこれらの問題を軽減できれば、Pythonの使用は大幅に改善されます。 SOコミュニティからの指導は非常に価値があります。特に、Python実行エンジンがどのように動作するかを知っている人なら誰でも知ることができます。

答えて

5

恐らく信じがたいですが、CPythonバージョン2.4 never releases memory to the OSです。これはverthon Python 2.5で修正されていると言われています。

さらに、Python 2.5とPython 2.6では、パフォーマンス(プロセッサー単位)が改善されました。

は、あなたが(Pythonの2.6でモジュール)multiprocessingを使用できない場合(アドバイス常に少なくとも考慮されるべきである)

アレックスマルテッリ、says multiprocess is the only way to go to free memory.をobmallocするエヴァン・ジョーンズのパッチと呼ばれるアイテムを探し、C API section in What's new in Python 2.5を参照してください。 os.forkは少なくとも利用可能です。 os.forkを最も基本的な方法(最初の作業プロセスを最初にフォークし、終了するのを待って、新しいものをフォークします)を使用して、インタプリタを25秒間支払うことよりも優れています。

+0

Python 2.6に移行してパッチを適用し、結果をすぐに報告します。ありがとう。 モジュールのインポートと初期化のパフォーマンスを最適化する方法についてのアイデアもありますが、私がロードしているモジュールの性質に大きく依存していると思われますが、 。 – sototozo

+0

できれば、私はこの質問のために賞金のために代理人を寄付します。 – u0b34a0f6ae