Pythonで処理時間を計測する方法は、パフォーマンスの最適化や処理効率の確認に役立ちます。
ここでは、標準ライブラリを使用したシンプルな方法から高度な方法まで紹介します。
timeモジュールを使用した計測
time
モジュールは、Python標準ライブラリに含まれており、シンプルに処理時間を計測できます。
import time
# 計測開始
start_time = time.time()
# 計測対象の処理
for i in range(1000000):
pass
# 計測終了
end_time = time.time()
# 結果出力
print("処理時間: {:.4f} 秒".format(end_time - start_time))
time.time()
は秒単位の精度で時間を取得し、開始と終了の差を計算することで処理時間が得られます。
timeitモジュールを使用した計測
timeit
モジュールは、より高精度で処理時間を計測できます。
特に短い処理の計測に向いており、繰り返し実行して平均的な時間を取得するために便利です。
import timeit
# 計測対象の関数
def sample_function():
for i in range(1000000):
pass
# timeitを使った計測
execution_time = timeit.timeit(sample_function, number=10)
print("処理時間: {:.4f} 秒".format(execution_time / 10)) # 平均時間
ここでは、number
引数で関数の実行回数を指定し、その平均時間を求めています。
timeit
は内部的により精度の高い時計を使用しているため、正確な測定が可能です。
コンテキストマネージャーを使った計測
Python 3.7以降では、time
モジュールのperf_counter
とコンテキストマネージャーを組み合わせて計測する方法が使われます。
これにより、コードがさらに見やすくなります。
from time import perf_counter
class Timer:
def __enter__(self):
self.start = perf_counter()
return self
def __exit__(self, *args):
self.end = perf_counter()
self.interval = self.end - self.start
# 計測の開始と終了をwith文で管理
with Timer() as timer:
for i in range(1000000):
pass
print("処理時間: {:.4f} 秒".format(timer.interval))
ここでは、perf_counter()
を使用して、システムの精度の高いタイマーを活用しています。
__enter__
で計測を開始し、__exit__
で計測を終了します。
cProfileモジュールによる詳細なプロファイリング
特定の関数や処理の詳細なパフォーマンスを分析したい場合、cProfile
モジュールが役立ちます。
処理全体にかかった時間だけでなく、各関数の呼び出し回数や時間もわかります。
import cProfile
def sample_function():
for i in range(1000000):
pass
# プロファイルの実行
cProfile.run('sample_function()')
cProfile.run()
を使用すると、関数内でどの処理が最も時間を消費しているかが表示されます。
ボトルネックの特定や最適化に便利です。
まとめ
time
モジュール
簡単で直感的な方法、シンプルな計測に向いている。timeit
モジュール
精度の高い計測に適し、繰り返し実行した平均時間が求められる。- コンテキストマネージャー (
perf_counter
使用)
計測を簡潔に書く方法で、Python 3.7以降で使用可能。 cProfile
モジュール
プロファイリング用のツールとして詳細な処理解析が可能。