ありふれたテーマですけど、プログラムの実行時間計測をやってみます。
時間を計測するだけなら、ごく簡単です。
これだけでも、経過時間は計算できます。
import time
start = time.time()
・・・・何かの処理・・・
stop =time.time()
result = stop -start
でも、そこら中にこんなコードを埋め込むのは面倒なので、ちょっとしたユーティリティを作ろうかなと。
合計時間とラップタイムがとれる仕様にします
使い方はこんな感じにします。
最初に、Timer() オブジェクトを作って、start()。
あとは、ラップタイムをとりたいタイミングで、get_string_lap()。
合計タイムをとりたいタイミングで、stop() → get_string()。
呼び出す都度、「00時間02分08秒17ミリ秒」という文字列を表示するようにします。
ラップタイムは呼び出し都度、前回の時間からの経過時間にします。
こうしておくと、深層学習の学習時に1エポック毎の経過時間を表示したり、色々と応用できますから。
実装したソースです
timer.py という名前にしてます。
ソース全文です。
import time from datetime import datetime import math class Timer: start_time = 0 end_time = 0 result_time = 0 lap_st = 0 def start(self): self.start_time = time.time() self.lap_st = self.start_time def stop(self): self.end_time = time.time() self.result_time = round(self.end_time - self.start_time,2) def get_string(self): return self.make_string(self.result_time) def get_string_lap(self): lap = time.time() st = self.lap_st self.lap_st = lap return self.make_string(round(lap - st,2)) def get(self): return self.result_time def make_string(self,result_time): ms,hms = math.modf(result_time) hour = math.floor(hms / 3600) mint = math.floor((hms % 3600) / 60) secd = math.floor(hms % 60) msec = math.floor(ms * 100) return str(hour).zfill(2) + "時間" + str(mint).zfill(2) + "分" + str(secd).zfill(2) + "秒" + str(msec).zfill(2) + "ミリ秒"
特に難しいことはないですね。
ちょっと工夫したのは、get_string_lap() のところで、ラップごとの開始時間を差し替えている部分くらいです。
動作確認と結果です
早速動作確認のかんたんなプログラムを作って試してみます。
utilsというフォルダを作って、その下に timer.py を置きました。
utilsフォルダに「__init__.py」(空のpyプログラム)をおいて、importできるようにしてます。
なので、import utils.timer as tmr としてますが、この辺はファイルの配置場所によって変わります。
import utils.timer as tmr import time # Timerオブジェクトを生成
timer = tmr.Timer()
# 計測開始 timer.start() for i in range(11): time.sleep(1.13)
# ラップタイプを表示する print("ラップ" + str(i).zfill(2) + "=" + timer.get_string_lap()) # 計測を終了して、合計時間を表示する
timer.stop() print("合計時間=" + timer.get_string())
単純に1.13秒ずつスリープしてラップタイムを表示しつつ、最後に合計を表示するだけのプログラムです。
出力結果です。
ラップ00=00時間00分01秒12ミリ秒
ラップ01=00時間00分01秒20ミリ秒
ラップ02=00時間00分01秒17ミリ秒
ラップ03=00時間00分01秒17ミリ秒
ラップ04=00時間00分01秒14ミリ秒
ラップ05=00時間00分01秒15ミリ秒
ラップ06=00時間00分01秒17ミリ秒
ラップ07=00時間00分01秒14ミリ秒
ラップ08=00時間00分01秒17ミリ秒
ラップ09=00時間00分01秒15ミリ秒
ラップ10=00時間00分01秒17ミリ秒
経過時間=00時間00分12秒88ミリ秒
まあ、こんなもんですかね。