モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Python 標準プロファイラ cProfile の簡単な使い方

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2018/09/06
最終更新最終更新
2021/01/11
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    プロファイリングツールを使った性能解析ができます

    0
    ステッカーを贈るとは?

    プログラムのある箇所が実行された時間や回数を計測するためのプロファイラについて、Python には標準で cProfile と profile があります。どちらも同じインタフェースを提供しており、通常は C の拡張でありオーバーヘッドの小さい cProfile を利用します。profile はプロファイラを拡張したいときに利用する C に依存していない実装です。

    cProfile

    結果の読み方

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from cProfile import Profile
    from time import sleep
    
    def Main():
        pr = Profile()
        pr.runcall(sleep, 1)
        pr.print_stats()
    
    if __name__ == '__main__':
        Main()
    

    実行例

    $ python sample.py 
             2 function calls in 1.004 seconds
    
       Ordered by: standard name
    
       ncalls  tottime  percall  cumtime  percall filename:lineno(function)
            1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
            1    1.004    1.004    1.004    1.004 {time.sleep}
    
    • 関数が実行された回数は 2 回で 1.004 秒を要した
    • 関数名の順に表示
    • ncalls 各関数の実行回数
    • tottime 各関数の実行に要した時間 (内部でサブ関数の実行に要した時間を除く)
    • percall tottime / ncalls
    • cumtime 各関数の実行に要した時間 (内部でサブ関数の実行に要した時間を含む)
    • percall cumtime / ncalls

    結果のファイルへの書き出しおよび利用

    書き出し

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from cProfile import Profile
    from time import sleep
    
    def Main():
        pr = Profile()
        pr.runcall(sleep, 1)
        pr.dump_stats('sample.profile')
    
    if __name__ == '__main__':
        Main()
    

    読み込み

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from pstats import Stats
    
    def Main():
        stats = Stats('./sample.profile')
        stats.sort_stats('cumtime') # 指定した情報でソートできます。
        stats.print_stats(10) # トップ10
        print stats.total_tt # tottime の合計
    
    if __name__ == '__main__':
        Main()
    

    RunSnakeRun

    cProfile の出力結果を可視化するためのツールとしては RunSnakeRun が利用できます。

    インストール

    sudo apt install runsnakerun
    

    可視化

    runsnake sample.profile
    

    今回は time.sleep がすべての実行時間を占めていますが、より複雑な状況では可視化できると便利です。

    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    プロファイリングツールを使った性能解析ができます

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事