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, Linux

Project details


Download files

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

Files for withstopwatch, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size withstopwatch-0.1.1.tar.gz (2.2 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page