Help us understand the problem. What is going on with this article?

Pythonのプロファイリングと可視化

More than 1 year has passed since last update.

プロファイラは今まで何度も投稿されたネタですが、cProfileの出力をKCacheGrindとpyprof2calltreeとで可視化する方法の紹介です。

KCacheGrindはプロファイリング結果を可視化するツールで、元々はC言語のValgrindプロファイラの可視化ツールとして開発されたようです。pyprof2calltreeはcProfileの結果をKCacheGrindで読み込めるようにする変換ツールです。

用意するもの

実験環境

OS: macOS High Sierra 10.13.2
Python3.6: Homebrewでインストールしたもの

インストール

# MacではQtでコンパイルされたqcachegrindを使う。
brew install qcachegrind
brew install graphviz
mkvirtualenv prof -p $(which python3)
pip install pyprof2calltree

そのほかテスト用

pip install numpy

実行例

例題としてマンデルブロ集合計算の計算をm.pyというファイル名で保存します。

import numpy as np

def mandel(z):
    maxiter = 80
    c = z
    for n in range(maxiter):
        if abs(z) > 2:
            return n
        z = z*z + c
    return maxiter
def mandelperf():
    r1 = np.linspace(-2.0, 0.5, 26)
    r2 = np.linspace(-1.0, 1.0, 21)
    return [mandel(complex(r, i)) for r in r1 for i in r2]

assert sum(mandelperf()) == 14791

cProfileを使って実行し、プロファイルの結果をm.cprofファイルに保存します。

python -m cProfile -o m.cprof m.py

pyprof2calltreeを-kオプションで立ち上げるとkcachegrindが起動します。

pyprof2calltree -k -i m.cprof

実行画面

Call Graphを選択するとグラフィカルに呼び出し順、実行回数、実行時間、全実行時間に占める割合が表示されます。

Screen Shot 2017-12-29 at 2.36.32 PM.png

Call Graphの他にも分析に便利な機能がいくつもありますので試してみてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした