51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
import time
|
|
|
|
|
|
class Timer:
|
|
def __init__(self, name='', logger=None):
|
|
self.name = name
|
|
self.start = time.time()
|
|
self.__last = self.start
|
|
self.logger = logger
|
|
|
|
@property
|
|
def elapsed(self):
|
|
return (time.time() - self.start) * 1000
|
|
|
|
@property
|
|
def last(self):
|
|
return (time.time() - self.__last) * 1000
|
|
|
|
def checkpoint(self, name=''):
|
|
text = 'Timer - {timer} - {checkpoint} - {last:.2f}ms ({elapsed:.2f}ms elapsed)'.format(
|
|
timer=self.name,
|
|
checkpoint=name,
|
|
last=self.last,
|
|
elapsed=self.elapsed
|
|
).strip()
|
|
self.__last = time.time()
|
|
if self.logger:
|
|
self.logger.debug(text)
|
|
else:
|
|
print(text)
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, type, value, traceback):
|
|
self.checkpoint('finished')
|
|
pass
|
|
|
|
|
|
class CountdownTimer:
|
|
|
|
def __init__(self, timeout):
|
|
self.timeout = timeout
|
|
self.start = time.time()
|
|
|
|
def elapsed(self):
|
|
return time.time() - self.start
|
|
|
|
def remainder(self):
|
|
return max(self.timeout - self.elapsed(), 0)
|