スポンサーリンク

【Python】処理時間の計測方法

記事内に広告が含まれています。

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モジュール
    プロファイリング用のツールとして詳細な処理解析が可能。

スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました