この記事は
Pythonのパッケージ管理ツールにAnacondaがあります.
このAnacondaではPythonの統合開発環境,Spyderが提供されています.
本記事ではSpyderでプラグインで利用できる"spyder-line-profiler"の使い方を簡単にまとめます.
https://github.com/spyder-ide/spyder-line-profiler
実行環境
- Ubuntu 16.04
- Python 3.5.4
- Anaconda 1.6.6
- Spyder 3.2.4
インストール
Anaconda
以下のようなサイトを参考にして,Anacondaを利用したPython環境の構築を行います.
spyder-line_profiler
本家githubにあるように,condaコマンドもしくはpipコマンドでインストールします.
# conda
$ conda install -c spyder-ide spyder-line-profiler
# or pip
$ pip install spyder-line-profiler
pipの方があっさり.
実行例
今回は以下のtest_profile.pyの実行時間を計測します.
100x100のarrayの和を計算する2つの関数(func1, func2)を使用します.
ポイントはプロファイリングしたい関数の前に@profileと書き加えることです.
import numpy as np
@profile
def func1(hoge):
s = 0
for i in range(hoge.shape[0]):
for j in range(hoge.shape[1]):
s += hoge[i, j]
print(s)
@profile
def func2(hoge):
print(hoge.sum())
@profile
def main():
a = np.ones((100, 100))
func1(a)
func2(a)
if __name__ == "__main__":
main()
このファイルをspyder上で開き,ツールバーの[実行]->[Profile line by line]をクリックすることでプロファイリングできます.
プロファイリングが終了すると,以下のスクリーンショットのようなタブが現れます.([ヘルプ]や[変数エクスプローラー]タブの隣に)
プロファイリング結果は,ホームディレクトリ下の.config/spyder-py3/lineprofiler.resultsに保存されるようです.
それぞれの列は,
- Line:行
- Hits:呼び出された回数
- Time:その行の総実行時間 (ms)
- Per hit:1回当たりの実行時間 (ms)
- % Time:その行の実行時間が,関数の実行時間に占める割合
% Timeによって行が色付けされていて,視覚的にも分かりやすい.