How to use line_profiler python

line_profilerをつかう[python]

pythonのプロファイルツール、line_profilerを使った時の備忘録

line_profilerとは

pythonのどのメソッドにどれくらい時間がかかったのかを計測してくれる便利ツール。 他にもプロファイラは歩けど、自分の書いたスクリプトの遅いところを探すのに便利。

インストール方法

pip単品でもあるんだけど、python3.7だと、Ctyhonと同時にインストールしないとうまく行かないパターンがある見たい。
Build from pypi fails for Python3.7

手持ちの環境が3.7だったので、これに沿ってインストール

pip install  Cython git+https://github.com/rkern/line_profiler.git

コード修正~計測

計測したいメソッド(dev)の1行手前に”@profile”と1行加える作業をする。 修正後、以下のコマンドを実行する。

kernprof -l your_python.py
python -m line_profiler your_python.py.lprof

1行目でyour_python.lprofというファイル名でファイルが吐き出されて、2行目でそれをline_profilerでpython実行をするとプロファイル結果がでてくる。

total time: 58.7863 s
File: your_python.py

Function: facet at line 31
Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    31                                               @profile
    32                                               def facet(self, row):
    33     24280      15656.0      0.6      0.0          attachment=[]
    34    582720     323728.0      0.6      0.6          for k,v in self.order.items():
    35    558440   13186545.0     23.6     22.4              d = row.get(k,0)
    36    558440     302533.0      0.5      0.5              if d == 1:
    37    102847      70516.0      0.7      0.1                  attachment.append(v)
    38
    39     24280   44859521.0   1847.6     76.3          row['test']=attachment
    40     24280      27843.0      1.1      0.0          return row

トータルで58秒このメソッドでかかっていて、39行目でその76%を使っていると見て取れる。 この場合はデータをseriesに追加していて遅くなってて、あとで直した。

プロファイルが終わったら書いた@profileの部分をコメントアウトして終了。 たまにやるけどよくわすれる。。。。

connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

Jp, Tokyo https://connvoi.com