プログラムの高速化のためにはtimeモジュールを使うのですが、いちいちコード打つのが面倒だし、ログも出してくれないかなとChatGPTくんに適当な仕様を出したらちょうど都合がいいのが出てきたので、それをもとに改良したコードを紹介します。ハードディスクの奥底に保存して、たまに引っ張り出すくらいなら共有してもらったほうが良いという感じで公開するので、もちろん著作権なんて主張しません。パブリックドメインです。好き勝手に使ってください。
timer_class.py
import time
class Timer_class:
def __init__(self, task):
'''
タイマーの開始時刻と終了時刻を格納する変数を初期化し、ログのファイル名を設定する
'''
self.start_time = None
self.end_time = None
self.task = task
self.fime_name = "time_log.csv"
def start(self):
'''
start_time 属性に現在時刻を保存することで、タイマーをスタートする
'''
self.start_time = time.perf_counter()
def stop(self):
''''
end_time 属性に現在時刻を保存することで、タイマーをストップする
また、_log_elapsed_time 関数を呼び出す。
'''
self.end_time = time.perf_counter()
self._log_elapsed_time()
def _log_elapsed_time(self):
'''
経過時間のログをCSV形式で保存する
'''
import datetime
#現在の時刻を取得する
elapsed_time = self._elapsed_time()
now = datetime.datetime.now()
# 経過時間と現在時刻をフォーマットしてログメッセージを作成する
log_message = f"{self.task},{elapsed_time:.6f},{now.strftime('%Y-%m-%d %H:%M:%S')}\n"
# ログファイルにログメッセージを追記する
with open(self.fime_name, "a") as f:
# ファイルが空の場合は見出しを追加する
if f.tell() == 0:
f.write("タスク,経過時間(sec),時刻\n")
f.write(log_message)
#ログをコンソールに表示させる
print(log_message, end="")
def _elapsed_time(self):
'''
タイマーの開始時刻と終了時刻の差分を計算して、経過時間を返す
'''
if self.start_time is None:
return 0
elif self.end_time is None:
return time.perf_counter() - self.start_time
else:
return self.end_time - self.start_time
使い方は次のように使います。
これだけ書けばだいたいおわかりかと思います。
test.py
#クラスの宣言
timer = Timer_class("Aの動作時間")
#スタート
timer.start()
# 何らかの処理を実行する
# ...
#ストップ
timer.stop()
それでは。