Python

【Python】実行時間を測る方法

この記事では、Pythonのコードの実行時間を計測する方法を紹介します。実行時間を測るには、timeモジュールを使って「終了時間 – 開始時間」で計算することができます。それでは、実際に測り方を見ていきましょう❗️

実行時間の計測方法

実行時間を計測するには、timeモジュールを使って「終了時間 – 開始時間」で求めます。

import time

# 開始時間
s_time = time.time()

# 計測したい処理


# 実行時間 = 終了時間 - 開始時間
e_time = time.time() - s_time
timeモジュールは、標準ライブラリです

サンプル

実際に実行時間を測ってみましょう。time.sleep()は、引数に指定された秒数だけ処理を一時停止させます。

import time

# 開始時間
start = time.time()

# 計測したい処理
time.sleep(0.1)  # 0.1秒処理を止める

# 終了時間 - 開始時間でかかった時間を計測
e_time = time.time() - start

print(f'{e_time}秒かかりました!')

実行結果

0.1051640510559082秒かかりました!

小数点以下の桁が多くて鬱陶しい場合は、round()関数で丸めるか書式を設定し、出力する精度を指定しましょう!

time = 0.161834627214927486

print(round(time, 2))
print('{:.2f}'.format(time))
# 0.16

print(round(time, 3))
print('{:.3f}'.format(time))
# 0.162

print(round(time, 4))
print('{:.4f}'.format(time))
# 0.1618

関数にまとめる

毎回同じようなことを記述するのはめんどいので関数にまとめると楽チンです。

例えば、以下のように2つの関数にまとめておくことで、実行速度を測りたい場合にその処理の前後で呼び出すだけで済みます。

import time

def start():
    global start_time
    start_time = time.time()

def finish(tag="経過時間"):
    if "start_time" in globals():
        print("{}: {:.9f} [sec]".format(tag, time.time() - start_time))
    else:
        print("start関数が呼ばれていない")


# 実行速度を測る
start()

time.sleep(0.1)

finish()

実行結果

経過時間: 0.104684830 [sec]

デコレーターで関数の実行時間を測る

デコレーターを使って実行時間を測ることもできます。定義したデコレーターを関数に修飾してやるだけで実行時間を測れるので、何度も計測したい場合こっちの方が楽です。

【Python】デコレーターの定義方法と使い方を解説 この記事では、Pythonのデコレーターの使い方を解説します。デコレーターとは、関数をラップするための機能です。関数にデコレーターを...

サンプル

以下のような感じで定義できます。後始末もデコレーターを消すだけでいいので楽。

import time

# 関数の実行時間を測るデコレータ
def tictoc(func):
    def _wrapper(*args, **keywargs):
        start_time = time.time()
        result = func(*args, **keywargs)
        print('time: {:.9f} [sec]'.format(time.time() - start_time))
        return result
    return _wrapper


@tictoc
def func():
    time.sleep(0.1)

func()

実行結果

time: 0.102931976 [sec]

高階関数で実行時間を測る

高階関数を定義し、実行時間を測ることもできます。

import time

def tictoc(func, *args, **kw):
    start_time = time.time()
    result = func(*args, **kw)
    print('time: {:.9f} [sec]'.format(time.time() - start_time))
    return result

以下のように使うことができます。

def func(second):
    time.sleep(second)
    return 1

# 引数には関数オブジェクトとその関数に渡す引数を指定する
tictoc(func, 0.1)

やってることはデコレーターと全く変わらないですね。ただ、時間を測りたくない場合に関数の呼び出しを書き換えなければならないのでめんどい。

timeitモジュールで実行時間を測る

timeitモジュールを使うことでも実行時間を計測できます。

timeitモジュールは、標準ライブラリです

組み込み関数の実行時間を測ってみる

以下のコードでは、abs()関数を100万回実行した時間を計測しています。
平均値ではないことに注意。

import timeit

print(timeit.timeit('abs(-1)', number=1000000))

実行結果

0.09136387300000001

標準ライブラリの実行時間も計測することができます。

import time
import timeit

print(timeit.timeit('time.sleep(0.1)', number=10))

実行結果

1.012838086

要素を準備する

setup引数を指定することで、計測に使用する要素の値を指定することができます。

以下のコードでは、「char = "a"」「s = "abcde"」を指定し、「char in s」の速度を計測しています。

import timeit

print(timeit.timeit('char in s', number=10000, setup='char = "a"; s = "abcde"'))

実行結果

0.00046209800000000106

自作した関数の速度を測る

以下のように、setup引数で計測したい関数をインポートすることで、自作した関数の速度も測ることができます。

import timeit
import time

def func(second):
    time.sleep(second)
    return 1

print(timeit.timeit('func(0.2)', number=1, setup='from __main__ import func'))

実行結果

0.203728162

まとめ

この記事では、Pythonで実行時間を測る方法を解説しました。

「終了時間 – 開始時間」で実行時間を測れるのは他の言語でも同じなので覚えておきましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』