1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonAdvent Calendar 2023

Day 1

Python で自身の定義した関数の実行時間のみ簡単に知る方法

Last updated at Posted at 2023-12-24

はじめに

ある程度大きく複雑なプログラムを定義する際には、たびたび関数ごとの動作速度を分析し、実行速度の改善に臨む必要が出てきます。こんな時、Python でどうやって実行速度を調べると良いのか迷う人も多いかと思います。僕自身も time モジュールを使って知りたい部分の実行時間を合計して print していました。しかし、Python には標準で実行時間計測モジュールが入っているとのことで、少しだけカスタムして簡単に見る方法を作ってみました。

環境

MacOS
Python 3.12
Jupyter Notebook

実装例

import cProfile
import pstats
import time

def fastHelloWorld():
    time.sleep(0.1)
    print("Fast: Hello, World!")

def slowHelloWorld():
    time.sleep(1)
    print("Slow: Hello, World!")

if __name__ == "__main__":
    # 計測の実施
    with cProfile.Profile() as pr:

        # 関数の実行
        fastHelloWorld()
        slowHelloWorld()

        # プロファイルの分析と結果のソート
        stats = pstats.Stats(pr).sort_stats('cumtime')
        # ファイル内で定義した関数のみフィルターし出力
        stats.print_stats('/var/folders', 1.)

        # 参考:フィルターなしの出力はこちら
        # stats.print_stats()

結果

ファイル内で定義した関数のみの実行時間が簡単に出ました。
image.png
fastHelloWorld に関しては time.sleep で1秒間処理を止めているんですが、なぜ実行時間が0.8秒とかになっているんでしょう、ちょっとわかりませんでした……
また、Windows に関しては未検証のため、一旦フィルターなしで出力してみて、良い感じのフィルター方法を探してみてください。もしあればコメントいただけると助かります。(気が向いたら検証しておきます)

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?