skip to content
barorin&?

Pythonで開始時刻と終了時刻を表示するデコレーターを作ろう!

/ 3 min read

はじめに

この記事では、Pythonで関数の実行時間を簡単に計測し、秒単位で表示する方法を紹介します。
具体的には、関数の開始時刻と終了時刻を記録し、その差分を表示するデコレータを作成する方法を解説します。
このデコレータを使用することで、任意の関数に対して実行時間を簡単に測定できるようになります。

方法

このデコレータは関数の呼び出し前に現在時刻を記録し、呼び出し後に再び時刻を記録します。
そして、両時刻の差分を計算して実行時間を表示します。datetime.datetime.now().replace(microsecond=0)により、 表示される時刻は秒単位までとなり、ミリ秒以下は切り捨てられます。

import datetime
import functools

def time_decorator(func):
    """開始時刻と終了時刻を表示するデコレーター"""

    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start_time = datetime.datetime.now().replace(microsecond=0)
        print("-" * 40)
        print(f"開始時刻: {start_time}")  # 開始時刻を表示

        result = func(*args, **kwargs)

        end_time = datetime.datetime.now().replace(microsecond=0)
        print(f"終了時刻: {end_time}")  # 終了時刻を表示
        print(f"実行時間: {end_time - start_time}")  # 実行時間を表示

        return result

    return wrapper

使用例

このデコレータを実際の関数に適用するには、以下のようにします。

このサンプル関数sample_functionは、指定された秒数だけプログラムの実行を一時停止します。
デコレータ@time_decoratorを適用することで、この関数の実行開始時刻と終了時刻、および実行にかかった時間が表示されます。

import time

# デコレーターの使用例
@time_decorator
def sample_function(seconds):
    """指定された秒数だけ待機するサンプル関数"""
    time.sleep(seconds)
    print('実行中1')
    print('実行中2')
    print('実行中3')

# 関数を実行してみる
sample_function(3)

# Output
# ----------------------------------------
# 開始時刻: 2024-08-14 14:05:53
# 実行中1
# 実行中2
# 実行中3
# 終了時刻: 2024-08-14 14:05:56
# 実行時間: 0:00:03