2章ボトルネック発見のためのプロファイリング

本章を読めば以下の問いに答えられるようになる
  • コード上のスピードとRAMのボトルネックをどのように特定するのか?
  • CPUとメモリの使用量をどのように測定するのか?
  • プロファイリングの深さをどのように選ぶのか?
  • 長時間実行するアプリケーションをどのようにプロファイリングするのか?
  • CPythonの内部では何が起こっているのか?
  • 性能をチューニングしながら、どのようにコードの正しさを維持するのか?

プロファイリングすると、ボトルネックを見つけて最小限の労力で最大限に性能を向上できます。わずかな労力で大幅に性能を向上しリソースの消費を削減したいものですが、実際には「必要十分なスピード」と「無駄のないリソース使用量」でコードが実行できることを目標とします。プロファイリングを用いると、総合的に最小限の労力で最大限に現実的な判断をすることができます。

CPUにかぎらず計測可能なリソースであればプロファイリングが可能です。本章では、CPU時間とメモリ使用量に着目します。ネットワークとディスク入出力についても同様の計測技法を使うことができるでしょう。

プログラムの実行が非常に遅いときや大量のRAMを使っているときには、自分のコードが関与する箇所であればどこでも修正したくなるものです。プロファイリングせずに、自分が問題だと信じる箇所を修正することもできますが、見当違いな箇所に手を入れて修正したつもりになっていることもよくあるので注意が必要です。コードの構造を変更する前に、直観に頼るのではなく、まずプロファイリングして仮説を立てることが重要です。

プロファイリングは手を抜くのにも役立ちます。まずプロファイリングすることにより、解消すべきボトルネックをすぐに特定できるので、要求される性能を達成するのに十分なだけ対処できます。プロファイリングせずに最適化すると、長い目で見た場合には労力が増えてしまうこともあります。常にプロファイリングの結果に基づいて行動するようにしましょう。 ...

Get ハイパフォーマンスPython now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.