PyPy における Python のパフォーマンスチューニング
これは PyPy Advent Calendar の記事です。PyPyのコアディベロッパーである " Maciej Fijalkowski " 氏のブログ " Analysing python's performance under PyPy " の抄訳+αです。 Python の一般的なパフォーマン解析のモデルは、" プロファイラ を実行して、ボトルネックを探し出し、それを最適化するか C で書き直す" ことです。しかし PyPy ではこのアプローチだけでは不十分です。なぜなら、 多くの大規模アプリケーションで、プロファイラはフラットです: PyPy のトランスレーションツールチェーン、Twisted、モダンな Web サーバ等が良い例です ボトルネックを発見したとしても、それが特定の関数内でのみ遅いのか、複数の関数が関係しているのか明確になるわけではありません。どうすれば遅くて、どうすれば速くなるかは CPython においても明確な答えはありません。JIT が適用されるとさらに複雑です。 JIT が特定のコードをどのようにコンパイルしたかを確認することが重要 になります。 パフォーマンスにおいては、特に GC 関連の問題は多くの関数に影響がありますが、プロファイルでは確認できません。 PyPy には、問題を解決するためのいくつかのツールが提供されています。プログラムのパフォーマン解析に関するいくつかの方法を示します。これはガイドラインであり、 銀の弾丸 ではありません。アプリケーションが複雑な場合は、多くの 鉛の弾丸 が必要でしょう。 >>>> テストを作成する これは品質に関するものではありません。多くの自動化されたテストを受けることで、その機能を失うことなく、よりパフォーマンスの高いコードにリファクタできるようにします。 >>>> ベンチマークを書く これが重要な出発点となります。ひとつのスクリプトで、できれば引数を指定して、変更の影響を測定できるようにする必要があります。 1 回だけしか実行されないスクリプトでない場合は、同じテストを繰り返し実...