- 製造業出身のデータサイエンティストがお送りする記事
- cProfile でどこの処理で時間がかかっているかを調べられることを知ったので、メモとして残しておきます。
はじめに
cProfile は、プログラムのどこで実行にどれだけ時間がかかったのかを提示してくれます。
普段、あまり使うことは無いのですが、処理を早くしたい時などに使える機能だなと思いました。
使い方
基本的な使い方は、-m cProfile
を付けて.pyファイルを実行すると使えます。
sample.py
def main(N):
for i in range(N):
pass
a()
b()
def a():
pass
def b():
for i in range(N):
pass
if __name__ == '__main__':
N = 10**6
main(N)
実行結果は下記です。
~/Desktop ❯ python -m cProfile sample.py
7 function calls in 0.074 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.074 0.074 sample.py:1(<module>)
1 0.022 0.022 0.074 0.074 sample.py:1(main)
1 0.020 0.020 0.029 0.029 sample.py:13(b)
1 0.000 0.000 0.000 0.000 sample.py:9(a)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2 0.032 0.016 0.032 0.016 {range}
簡単に各項目の説明を下記に記載します。
項目 | 概要 |
---|---|
ncalls | 呼び出し回数 |
tottime | 関数で消費した合計時間 |
percall | tottime をncalls で割った値 |
cumtime | 関数全てのsubfunction に消費された累積時間 |
percall | cumtime をプリミティブな呼び出し回数で割った値 |
filename:lineno(function) | ファイル名、行番号、関数名 |
##さいごに
最後まで読んで頂き、ありがとうございました。
本日は短いですが、cProfile でプロファイリングできることを知りましたのでメモとして残しておきました。