Stopwatch
The stopwatch implements a solution to measure and collect timings: e.g. code execution times or test run times.
The time measurement can be started, paused,
resumed and stopped. More
over, split times can be taken too. The measurement is based on time.perf_counter_ns(). Additionally, starting and
stopping is preserved as absolute time via datetime.datetime.now().
Every split time taken is a time delta to the previous stopwatch operation. These are preserved in an internal sequence of splits. This sequence includes time deltas of activity and inactivity. Thus, a running stopwatch can be split as well as a paused stopwatch.
The stopwatch can also be used in a with-statement, because it implements the context manager protocol.
from pyTooling.Stopwatch import Stopwatch
sw = Stopwatch("my name")
sw.Start()
# do something
sw.Stop()
sw = Stopwatch("other name", started=True)
# do something
sw.Stop()
from pyTooling.Stopwatch import Stopwatch
sw = Stopwatch("my name")
sw.Start()
# do something
sw.Pause()
# do something other
sw.Resume()
# do something again
sw.Stop()
from pyTooling.Stopwatch import Stopwatch
sw = Stopwatch("my name", preferPause=True)
with sw:
# do something
# do something other
with sw
# do something again
Features
- Name
A stopwatch can be named at creation time.
- Starting and stopping
The stopwatch can be started and stopped. Once stopped, no further start or pause/resume is possible. A stopwatch can’t be restarted. A new stopwatch object should be created and the old can be destroyed.
The stopwatch collects the absolute start (begin) and stop (end) times. It then provides a duration from start to stop operation.
- Pause and resume
A stopwatch can be paused and resumed.
- Split times
tbd
- Iterating split times
tbd
- Using in a
with-statement tbd
- State of a stopwatch
tbd
@export
class Stopwatch(SlottedObject):
def __init__(self, name: str = None, started: bool = False, preferPause: bool = False) -> None:
...
def __enter__(self) -> "Stopwatch":
...
def __exit__(self, exc_type: Type[Exception], exc_val: Exception, exc_tb: Traceback) -> bool:
...
def Start(self) -> None:
...
def Split(self) -> float:
...
def Pause(self) -> float:
...
def Resume(self) -> float:
...
def Stop(self):
...
@readonly
def Name(self) -> Nullable[str]:
...
@readonly
def IsStarted(self) -> bool:
...
@readonly
def IsRunning(self) -> bool:
...
@readonly
def IsPaused(self) -> bool:
...
@readonly
def IsStopped(self) -> bool:
...
@readonly
def StartTime(self) -> Nullable[datetime]:
...
@readonly
def StopTime(self) -> Nullable[datetime]:
...
@readonly
def HasSplitTimes(self) -> bool:
...
@readonly
def SplitCount(self) -> int:
...
@readonly
def ActiveCount(self) -> int:
...
@readonly
def InactiveCount(self) -> int:
...
@readonly
def Activity(self) -> float:
...
@readonly
def Inactivity(self) -> float:
...
@readonly
def Duration(self) -> float:
...
def __len__(self):
...
def __getitem__(self, index: int) -> Tuple[float, bool]:
...
def __iter__(self) -> Iterator[Tuple[float, bool]]:
...