py-tools/tools/stopwatch.py

44 lines
1014 B
Python

from time import time
from .types import FloatOrNone
class StopWatch:
started: FloatOrNone = None
stopped: FloatOrNone = None
def __init__(self, auto_start=True):
if auto_start:
self.start()
def start(self):
self.started = time()
self.stopped = None
def stop(self) -> float:
self.stopped = time()
return self.elapsed()
reset = start
def elapsed(self) -> float:
if self.stopped is None:
return time() - self.started
else:
return self.stopped - self.started
def avg_elapsed(self, divider: int) -> float:
return self.elapsed() / divider
def avg_string(self, divider: int) -> str:
units = ['s', 'ms', 'µs', 'ns']
unit = 0
elapsed = self.avg_elapsed(divider)
while 0 < elapsed < 1:
elapsed *= 1000
unit += 1
return "%1.2f%s" % (elapsed, units[unit])
def __str__(self):
return self.avg_string(1)