pythonプログラムのパフォーマンス、ここでは
1. 行単位の実行時間と実行頻度
2. 行単位のメモリ使用量
を調べる方法を紹介します。
参考ページ(Pythonスクリプトのパフォーマンス計測ガイド | Yakst)
行単位の実行時間と実行頻度
line_profilerモジュールを使います。
1. インストール
pip3 install line_profiler
2. 使用方法
Python sorting外観 - サブロウ丸
上記のソーティング関数を例に、使ってみたいと思います。
sample.py
from random import randint @profile def bubble_sort(a): n = len(a) for i in range(n-1): for j in range(n-i-1): if a[j] > a[j+1]: a[j], a[j+1] = a[j+1], a[j] return a @profile def shell_sort(a): n = len(a) gap, i, h = [], 1, 1 while h < n: gap.append(h) h = (3**i+1)//2 i = i + 1 for h in gap[::-1]: for i in range(h, n): key, j = a[i], i while j > 0 and a[j-h] > key: a[j-h]= a[j] j = j - h a[j] = key return a if __name__ == '__main__': n = 1000 a = [randint(0, 100) for _ in range(n)] bubble_sort(a) shell_sort(a)
計測したい関数の前に@profile
をつけるだけで準備はOKです。
後はこのスクリプトを
kernprof -l -v sample.py
で実行するだけです。
結果の出力は以下の通り。
ね。面白いですね。これからHIt数や処理時間が長い行を発見することができます。
行単位のメモリ使用量
memory_profilerモジュールを使います。
1. インストール
pip3 install memory_profiler psutil
2. 使用方法
こちらもline_profiler
のときと同様に、調べたい関数の前に@profile
をつけるだけで準備はOKです。
python3 -m memory_profiler sample.py
で実行
結果の出力は
こんな感じです。