0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonでプログラムの経過時間を図ってログを出してくれる便利なタイマー

Last updated at Posted at 2023-05-08

プログラムの高速化のためには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()

それでは。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?