私は既存のアプリケーションの速度向上を目指しており、可能なオプションについてアドバイスを探しています。このアプリケーションはPythonで書かれており、wxPythonを使用しており、py2exe
(私はWindowsプラットフォームのみをターゲットにしています)でパッケージ化されています。アプリケーションの一部は計算量が多く、解釈されるPythonではあまりにも遅く実行されます。私はCに精通していないので、コードの一部を移植することは本当に私の選択肢ではありません。PyPyまたはShedskinを使用して既存のPythonアプリケーションの部分を高速化する
私の質問は、基本的に私が以下に概要を説明しているように私の選択肢の明確なイメージを持っているのですか、それとも間違った方向からアプローチしていますか?
- pypyで実行:今日は私がPypyの実験を開始した - 結果は、エキサイティングであることに、私はpypyインタプリタからのコードの大部分を実行することができますし、私はコードの変更なしで5倍+スピードの改善を見ています。しかし、私が正しく理解すれば、(a)wxpythonをサポートしているPypyはstill a work in progress、(b)I cannot compile it down to an exe for distribution anywayです。私が間違っていない限り、これは私のために行くもののように思えますか?物をパッケージ化する方法はないので、その部分はpypyで実行されますか?
- RPythonに変換し、pypyで翻訳する次のオプションは実際にコードの一部をpypyの制限付き言語に書き換えているようですが、かなり大きな仕事のようです。しかし、そうすれば、コードの一部を実行可能ファイル(?)にコンパイルしてから、ctypes(?)でコードにアクセスできます。
- その他の制限付きオプションシェディスキンがここでよく使われているようですが、これは私の要件に適していますか?他のオプションはCpython、Psyco、Unladenのように見えますが、それらはすべて置き換えられているか、あるいは維持されていません。
ありがとう、私はあなたの答えを受け入れました。しかし、非常に生産的な午後Cythonで遊んだ後、私は克服できない問題を抱えてきたと思う:Cythonのスレッディングサポートの欠如。以前はスレッドで実行され、GUIをロックしていなかった計算量の多い計算は、すべてをフリーズしていました。 グーグルでは、これは設計によるものです。並列処理(http://docs.cython.org/src/userguide/parallelism.html#parallel)を取得することはGILをリリースすることであり、GILのすべてのコードはネイティブのPythonオブジェクトを使用できませんが、これを正しく理解していますか?それはCythonを良くしないだろう。 – misshapen
@NickJ(1)CythonがPythonスレッドをサポートしているかどうかわかりませんが、なぜそれができないのか分かりません。たぶんあなたがリンクしている代替案は、複数のCPUを使用できるため、単に*優先されます*。 (2)これはあなたのタイプミスであるかどうか分かりませんが、GILで保護されているコードはPython型を使用できますが、nogilセクションは使用できません(CPython、したがってすべてのPython型は依存しますGIL)。 (3)それ以外にも、並列化したいものを相対的に純粋なCython関数に入れ、Python経由でスレッドを開始することで、Cythonのスレッド化なしで逃げることができます。 – delnan