はじめに
この記事では、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