py-tools/tools/stopwatch.py
Stefan Harmuth 6b5d3de95b allow stopwatch to return averages
fix AOCDay._submit()
2021-12-28 21:11:07 +01:00

42 lines
991 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()
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 elapsed < 1:
elapsed *= 1000
unit += 1
return "%1.2f%s" % (elapsed, units[unit])
def __str__(self):
return self.avg_string(1)