Last active
January 12, 2021 11:00
-
-
Save tomowarkar/3d48ae57b8a2a226299734ff54426d3a to your computer and use it in GitHub Desktop.
My simple timer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import time | |
class Timer: | |
_events = [] | |
def _add_event(self): | |
"""Add a event time recode""" | |
self._events.append(time.perf_counter()) | |
def start(self): | |
"""Starts the timer""" | |
if not self.isRunning: | |
self._add_event() | |
def stop(self): | |
"""Stops (or pauses) the timer""" | |
if self.isRunning: | |
self._add_event() | |
def reset(self): | |
"""Resets the timer""" | |
self._events = [] | |
@property | |
def isRunning(self): | |
return bool(len(self._events) % 2) | |
@property | |
def lap_time(self): | |
if self.isRunning: | |
return time.perf_counter() - self._events[-1] | |
return 0 | |
@property | |
def elapsed(self): | |
"""Calculate total amount of elapsed time""" | |
closed_lap = sum(e - b for b, e in zip(self._events[::2], self._events[1::2])) | |
return closed_lap + self.lap_time | |
if __name__ == '__main__': | |
t = Timer() | |
t.start() | |
time.sleep(0.5) | |
t.stop() | |
time.sleep(0.5) | |
t.start() | |
time.sleep(0.5) | |
print(t.elapsed) | |
time.sleep(1) | |
t.stop() | |
from datetime import timedelta | |
print(str(timedelta(seconds=t.elapsed))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment