コンテンツにスキップ

pyinstrument を使って Python のプロファイリングをする

pyinstrumentは Python のプロファイリングツールの 1 つで、コードの実行時間を計測して可視化できる。この記事では、pyinstrument の使い方を紹介する。

install

pip install pyinstrument

使い方

CLI

CLI で使う場合は次のように使う。

pyinstrument my_script.py

-r htmlを使うと HTML ファイルに出力することもできる。そのファイルを確認することで、どの処理に時間がかかっているかを視覚的に理解しやすい。各オプションは-h, --helpで確認できる。

Python

Python のコード内で使う場合は次のように使う。

1
2
3
4
import pyinstrument

with pyinstrument.profile():
    # your code
1
2
3
4
5
import pyinstrument

@pyinstrument.profile()
def your_function():
    # your code
1
2
3
4
5
6
7
8
9
from pyinstrument import Profiler

profiler = Profiler()
profiler.start()

# your code

profiler.stop()
profiler.print()

Python API も CLI と同様に HTML ファイルに出力できる。link

出力例

サンプルの HTML ファイルはこちらで確認できる。

関連リンク

IPython や WebAPI フレームワーク、Pytest 実行の中で pyinstrument を使う方法も公式ドキュメントで紹介されている。

実際に使ってみた感想

pyinstrument は Python のプロファイリングツールの中でも使いやすいツールの 1 つだと感じた。特に HTML ファイルに出力することで、どの処理に時間がかかっているかを視覚的に理解しやすい。CLI と Python API としても簡単に使えるので、ユースケースに応じて使い分けができる。類似のツールとしてpy-spyがあるが、pyinstrument の方が個人的に好みだった。py-spy も HTML 出力できるし、Rust で書かれているので速く、パフォーマンス影響も少ないが、プロファイル結果の分かりやすいさの点で pyinstrument の方が個人的には好みだ。 ただし、pyinstrument を使っているとメモリ周りの挙動で気になる点があり、一部のケースでパフォーマンス劣化や OOM が起こることがあった。そのため、必要に応じて他のプロファイリングツールと組み合わせて使うことが望ましい。pyintrument を利用する際は本番環境ではなく、開発環境での利用を推奨する。