Python

pyFBIでPythonプログラムのパフォーマンス解析 -プロファイル作成から可視化まで-

pyfbiでプロファイルを可視化

こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。

今回はPythonプログラムのパフォーマンス解析に役立つ pyFBI を紹介します。

プロファイル(profile)とは

プログラムのパフォーマンス解析結果に関する統計情報をプロファイルと呼びます。今回はPythonプログラムの下記項目を解析し、プロファイルを作成します。

  • 各関数が呼ばれた回数
  • 各関数の実行時間

どの関数に時間がかかっているか? 頻繁に呼ばれる関数はどれか? などを把握し、ボトルネックになっている処理を改修するのは、とても重要な作業です。

Python プロファイラ と pyFBI

標準ライブラリのPythonプロファイラはありますが、少し使いにくいので、今回はパフォーマンス解析が簡単かつ、結果(プロファイル)の可視化まで行ってくれる pyFBI を採用します。

スポンサーリンク

実践!Pythonプログラムのパフォーマンス解析

適当なPythonプログラムを作成して、パフォーマンス解析を実践してみます。まずは以下のコマンドで pyFBI インストールします。

pip install pyfbi

Pythonプログラミング

今回は下記のプログラムを解析対象とします。

func*()は*秒スリープするだけのシンプルな関数です。

pyFBIで任意の関数を解析

pyFBIを活用すれば、数行のコードを組み込むだけで解析ができます。

このコードを実行すると以下の解析結果が表示されます。

Pythonプログラムのパフォーマンス解析

@pyfbi.target を付けた関数が解析対象なので、func2 の結果はありません。func1 の実行時間は percall=0.999(約1sec)、2回呼ばれたので ncalls=2 という結果でした。

cumtime(累計時間)は以下の式で算出されます。

cumtime = percall * ncalls

そのため func1 の場合、cumtime=1.997(約2sec)でした。その他の項目も同様の見方でパフォーマンスを確認できます。

pyFBIですべての関数を解析

すべての関数を解析対象とする場合は、以下のコードを使います。

global_watch=Trueとすれば、@pyfbi.targetの有無に関係なく、すべての関数が解析対象となります。

プロファイルの可視化

末尾に以下のコードを組み込むことで、プロファイルを保存できます。

例えば、以下のように設定すれば、profilesフォルダ main_profiles という名前のファイルが保存されます。

以下のコマンドでプロファイル可視化ツールを起動できます。

pyfbi_viz –stat_dir=”./profiles”

※パスやフォルダ名は任意に変更してください

Pythonプログラムのパフォーマンス解析port 3000と表示されたら、適当なブラウザ(Google chrome など)に  http://127.0.0.1:3000 と打ち込めば、以下のようなプロファイルを可視化した画面が表示されます。

pyfbiでプロファイルを可視化

※本記事では割愛しますが、統計情報の表も画面に表示されます

ツールを終了するときは、ターミナルに Ctrl + c と打ち込みます。

まとめ -pyFBIでPythonプログラムのパフォーマンス解析-

Pythonプログラムのパフォーマンス解析を実践しました。 pyFBI を活用すれば、簡単にプロファイル作成から可視化まで行えます。

ボトルネックになっている処理を発見・改修を行い、プログラムのパフォーマンス向上を目指しましょう。

本記事が、より良いソースコードを書くときの参考になれば嬉しいです。

はやぶさ
はやぶさ
私も良いコードを書くため、日々精進します!

以下に良いコードを書くための参考書籍を紹介します。ご参考までに。

Amazonギフト券チャージで最大2.5%ポイント還元
Amazonはチャージがお得

Amazonプライム会員なら、Amazonギフト券を現金でチャージ(コンビニ・銀行払い)すると最大2.5%ポイント還元!

クレジットカード払いでもキャンペーンエントリー0.5%ポイント還元中です。

Amazonでお得に買い物をするならまずはチャージから。

\チャージがお得/

詳細をチェックする

Amazonプライム無料体験中でもOK!

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python