2章プロファイリングしてボトルネックを見つける

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

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

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

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

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

Get ハイパフォーマンスPython 第2版 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.