今回は、Pythonスクリプトの実行時間を確認する方法について説明します。
Pythonにはtime、timeit、datetimeモジュールなど、プログラムの特定部分が実行されている時間を保存できるモジュールが数多くあります。
あるセクションが実行されている開始時刻と終了時刻の差を操作または取得することで、そのセクションの実行に要した時間を計算することができます。
時間差の計算には、次のような方法があります。
- timeモジュール
-
Pythonの標準ユーティリティモジュールに属し、時間に関連する様々な関数があります。
Timeモジュールのtime.time()
メソッドは、エポックからの秒単位の時間を取得するために使用されます。
うるう年の扱いはプラットフォームに依存しますので、注意が必要です。 - datetimeモジュール
-
主に現在の日時を取得するために使用できる関数を定義しています。
now()
関数 datetimeモジュールの下で定義されている現在のローカルな日時を返します。 - timeitモジュール
-
コードのスニペットをn回(デフォルト値は1000000)実行し、コードの実行時間の統計的に最も適切な測定値を得ることができます。
それぞれの方法について、詳しく説明をしていきます。
初めに、timeモジュールからです。
timeモジュール:Pythonプログラムの時間を計測する方法
ここでは、開始時刻と終了時刻を記録して、実行にかかった時間を測定します。
import time
# プログラムの開始位置で時間を取得
start = time.time()
# 実行する処理をここに挿入
a = 0
for i in range(1000):
a += (i ** 100)
# プログラムの終了位置で時間を取得
end = time.time()
# 終了時点の時刻から開始時点を引いて、時間を計測する
print("計測時間 :",
(end - start) * 10 ** 3, "ms")
# 出力結果
計測時間 : 0.9977817535400391 ms
このように、timeモジュールを利用することで、時間を計測することができます。
次に、1回ごとの処理時間を見たい場合について解説していきます。
timeモジュール:Pythonプログラムの1回ごとの処理にかかる時間を計測する方法
for文などを使った際、反復ごとに所要時間を集計し、コードセグメントにかかる時間を測定します。
import time
# テスト用サンプルコードの作成
for j in range(100, 10001, 100):
# 開始時刻を取得
start = time.time()
a = 0
for i in range(j):
a += (i ** 100)
# 終了時刻を取得
end = time.time()
# 終了時刻から開始時刻を引き、実行時間を計算
print(f"Iteration: {j}\tTime taken: {(end - start) * 10 ** 3:.03f}ms")
#出力結果
Iteration: 100 Time taken: 0.000ms
Iteration: 200 Time taken: 0.000ms
Iteration: 300 Time taken: 0.997ms
Iteration: 400 Time taken: 0.000ms
Iteration: 500 Time taken: 0.997ms
・・・
Iteration: 9800 Time taken: 13.963ms
Iteration: 9900 Time taken: 27.363ms
Iteration: 10000 Time taken: 28.924ms
このように、for文の間に差し込むことで、1回ごとの処理にかかる時間を測定します。
では次に、datetimeモジュールを利用した実行時間の計測について解説します。
datetimeモジュール:Pythonプログラムの時間を計測する方法
Pythonのdatetimeモジュール
とdatetime.now()
関数を使って、開始と終了インスタンスのタイムスタンプを記録し、その差を求めてコードの実行時間を求めます。
from datetime import datetime
# 開始時刻を取得
start = datetime.now()
# 処理を記載
a = 0
for i in range(1000):
a += (i ** 100)
# 終了時刻を取得
end = datetime.now()
# 終了時刻から開始時刻を引き算することで時間を計測
td = (end - start).total_seconds() * 10 ** 3
print(f"計測時間 : {td:.03f}ms")
# 出力結果
計測時間 : 0.640ms
このようにdatetimeモジュールを活用して時間を計測することも可能です。
この記事では、時刻計測について主な2手法について例を交えながら解説しました。
皆様のお役に立てれば幸いです。