1. ホーム
  2. python

[解決済み] Timeモジュールで経過時間を計測する

2022-03-14 10:38:14

質問

PythonのTimeモジュールを使って、経過時間を計測することは可能ですか?もし可能なら、どのようにすればよいですか?

カーソルがあるウィジェットにある一定時間滞在すると、イベントが発生するようにしたいのですが。

どのように解決するのですか?

start_time = time.time()
# your code
elapsed_time = time.time() - start_time

また、簡単なデコレータを書くことで、様々な関数の実行時間の計測を簡略化することができます。

import time
from functools import wraps

PROF_DATA = {}

def profile(fn):
    @wraps(fn)
    def with_profiling(*args, **kwargs):
        start_time = time.time()

        ret = fn(*args, **kwargs)

        elapsed_time = time.time() - start_time

        if fn.__name__ not in PROF_DATA:
            PROF_DATA[fn.__name__] = [0, []]
        PROF_DATA[fn.__name__][0] += 1
        PROF_DATA[fn.__name__][1].append(elapsed_time)

        return ret

    return with_profiling

def print_prof_data():
    for fname, data in PROF_DATA.items():
        max_time = max(data[1])
        avg_time = sum(data[1]) / len(data[1])
        print "Function %s called %d times. " % (fname, data[0]),
        print 'Execution time max: %.3f, average: %.3f' % (max_time, avg_time)

def clear_prof_data():
    global PROF_DATA
    PROF_DATA = {}

使用方法

@profile
def your_function(...):
    ...

複数の関数を同時にプロファイリングすることができます。そして、測定値を表示するには print_prof_data() を呼び出すだけです。