65 строки
1.6 KiB
Python
65 строки
1.6 KiB
Python
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
from timeit import default_timer
|
|
from datetime import timedelta
|
|
|
|
|
|
class Timer(object):
|
|
"""Timer class.
|
|
Original code: https://github.com/miguelgfierro/codebase
|
|
|
|
Examples:
|
|
>>> import time
|
|
>>> t = Timer()
|
|
>>> t.start()
|
|
>>> time.sleep(1)
|
|
>>> t.stop()
|
|
>>> t.interval < 1
|
|
True
|
|
>>> with Timer() as t:
|
|
... time.sleep(1)
|
|
>>> t.interval < 1
|
|
True
|
|
>>> "Time elapsed {}".format(t) #doctest: +ELLIPSIS
|
|
'Time elapsed 1...'
|
|
"""
|
|
|
|
def __init__(self):
|
|
self._timer = default_timer
|
|
self._interval = 0
|
|
self.running = False
|
|
|
|
def __enter__(self):
|
|
self.start()
|
|
return self
|
|
|
|
def __exit__(self, *args):
|
|
self.stop()
|
|
|
|
def __str__(self):
|
|
return "{:0.4f}".format(self.interval)
|
|
|
|
def start(self):
|
|
"""Start the timer."""
|
|
self.init = self._timer()
|
|
self.running = True
|
|
|
|
def stop(self):
|
|
"""Stop the timer. Calculate the interval in seconds."""
|
|
self.end = self._timer()
|
|
try:
|
|
self._interval = self.end - self.init
|
|
self.running = False
|
|
except AttributeError:
|
|
raise ValueError(
|
|
"Timer has not been initialized: use start() or the contextual form with Timer() as t:"
|
|
)
|
|
|
|
@property
|
|
def interval(self):
|
|
if self.running:
|
|
raise ValueError("Timer has not been stopped, please use stop().")
|
|
else:
|
|
return self._interval
|