【Python】コード内で実行時間を測る方法

Python

この記事では、Pythonのコードの実行時間を計測する方法を紹介します。

実行時間を測るには『終了時間 – 開始時間』で求めることができます。

計測方法

timeモジュールを使って以下のように定義します。

import time

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

# 計測したい処理


# 実行時間 = 終了時間 - 開始時間
e_time = time.time() - s_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秒かかりました!

実行時間は、計測するたびに変動するので、平均値をとってやるとムラなく計測することができます。

import time

# 計測回数
count = 10

# 実行時間の合計値
e_time = 0

# countの数だけループ処理
for i in range(count):

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

    # 計測したい処理
    time.sleep(0.1)

    # かかった時間を足していく
    e_time += time.time() - start

# かかった時間の合計 / 計測回数で平均値を求める
print(f'{e_time / count}秒かかりました!')

実行結果

0.10123465061187745秒かかりました!

これで実行時間をムラなく計測することができました!

Pythonではいろんな方法で実行時間を計測することができます。
興味がある方は下記も見ていって下さい!

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

デコレーターを定義して関数に修飾してやるだけで、関数の実行時間を測ることができます。

【Python】デコレーターを使って関数を修飾する【Python】デコレーターを使って関数を修飾する

サンプル

計測回数を指定してもしなくても呼び出せるようにしました。

import time
import functools


def func_speed(arg=1):
    def _func_speed(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            e_t = 0
            for _ in range(count):
                s_t = time.time()
                result = func(*args, **kw)
                e_t += time.time() - s_t
            print(e_t / count)
            return result
        return wrapper

    if isinstance(arg, int):
        count = arg
        return _func_speed
    else:
        count = 1
        return _func_speed(arg)


# 通常
@func_speed
def func1():
    time.sleep(0.1)


# 「()」を付ける
@func_speed()
def func2():
    time.sleep(0.1)


# デコレータの引数に計測回数を指定
@func_speed(5)
def func3():
    time.sleep(0.1)


func1()
func2()
func3()

実行結果

0.10236024856567383
0.10274481773376465
0.10311861038208008

関数で実行時間を測る

関数を使って実行速度を測ることもできます。

import time

def func_speed(func, *args, **kw):
    start = time.time()
    result = func(*args, **kw)
    print(f'time: {time.time() - start}')
    return result

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

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

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

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

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

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

以下のコードでは、abs関数を100万回実行した時間を計測しています。

平均値ではありません。

import timeit

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

実行結果

0.09136387300000001

要素を準備する

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
タイトルとURLをコピーしました