Skip to main content

Stopwatch as a context manager.

Project description

# pip install withstopwatch
# >>> from withstopwatch import Stopwatch

Basic usage:
>>> with Stopwatch():
...     print('<some activity to be measured>')
<some activity to be measured>
0 ms

Using fields:
>>> with Stopwatch() as s:
...     pass
0 ms
>>> assert isinstance(s.label, str) and s.label == '0 ms'
>>> assert isinstance(s.ms, int) and s.ms == 0
>>> assert isinstance(s.s, int) and s.s == 0
>>> assert isinstance(s.seconds, float) and s.seconds > 0
>>> assert isinstance(s.timedelta, datetime.timedelta)
>>> assert isinstance(s.start, datetime.datetime)
>>> assert isinstance(s.stop, datetime.datetime)

`str` and `repr`:
>>> assert str(s) == s.label
>>> repr(s)  # doctest: +ELLIPSIS
'<Stopwatch: datetime.timedelta(0, 0, ...)>'

Silence options:
>>> with Stopwatch(template=None) as s:
...     pass
>>> assert s.label is None
>>> with Stopwatch(file=None) as s:
...     pass
>>> assert s.label == '0 ms'

With different templates:
>>> with Stopwatch(template='passing'):
...     pass
0 ms: passing
>>> with Stopwatch('passing'):
...     pass
0 ms: passing
>>> with Stopwatch('{ms} ms'):
...     pass
0 ms
>>> with Stopwatch('{s} s'):
...     pass
0 s
>>> with Stopwatch('{:.03f} (i.e. {seconds:.03f})'):
...     pass
0.000 (i.e. 0.000)
>>> with Stopwatch('{timedelta}'):
...     pass   # doctest: +ELLIPSIS
0:00:00.000...
>>> with Stopwatch('from {start!r} to {stop!r}') as s:
...     pass   # doctest: +ELLIPSIS
from datetime.datetime(...) to datetime.datetime(...)
>>> assert s.stop - s.start == s.timedelta

With an exception:
>>> with Stopwatch(file=None):
...     raise Exception()
Traceback (most recent call last):
Exception
>>> try:
...     with Stopwatch() as s:
...        raise Exception()
... except Exception as exc:
...     print(repr(s))  # doctest: +ELLIPSIS
0 ms
<Stopwatch: datetime.timedelta(0, 0, ...)>

Testing with `time.sleep` (note: the tests may fail during a slower run):
>>> import time
>>> with Stopwatch() as s:
...     time.sleep(0.1)
100 ms
>>> assert 0.1 < s.seconds < 0.2

Embedded stopwatchs:
>>> with Stopwatch('outer'):
...     with Stopwatch('inner'):
...         pass
0 ms: inner
0 ms: outer

Measuring the overhead of Stopwatch using Stopwatch itself
(note: the tests may fail during a slower run):
>>> with Stopwatch(file=None) as s1:
...     with Stopwatch('inner') as s2:
...         pass
0 ms: inner
>>> with Stopwatch(file=None) as s3:
...     pass
>>> overhead = s1.seconds - s3.seconds
>>> assert 0 <= overhead < 0.0001  # ~20 us on i5@2.60GHz, Python 3.6, Linux

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

withstopwatch-0.1.2.tar.gz (2.2 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page