コンテンツにスキップ

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

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

install

pip install pyinstrument

使い方

CLI から実行する方法と、Python コード内から呼び出す方法の 2 通りを紹介する。

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 ファイルに出力できる。pyinstrument の API リファレンス

出力例

pyinstrument が出力する HTML プロファイル結果のスクリーンショット

サンプルの HTML ファイルはpyinstrument の出力プレビューで確認できる。

関連リンク

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

実際に使ってみた感想

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