Stopwatch as a context manager.
Project description
# >>> from withstopwatch import Stopwatch
Basic usage:
>>> with Stopwatch():
... print('<some activity to be measured>')
<some activity to be measured>
0 ms
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)
>>> assert s.stop - s.start == s.timedelta
`str` and `repr`:
>>> assert str(s) == s.label
>>> repr(s) # doctest: +ELLIPSIS
'<Stopwatch: datetime.timedelta(...)>'
Silencing:
>>> with Stopwatch(template=None) as s:
... pass
>>> assert s.label is None
>>> with Stopwatch(print=None) as s:
... pass
>>> assert s.label == '0 ms'
Special print:
>>> with Stopwatch(print=lambda line: print('DEBUG:', line)) as s:
... pass
DEBUG: 0 ms
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...
>>> with Stopwatch('from {start!r} to {stop!r}') as s:
... pass # doctest: +ELLIPSIS
from datetime.datetime(...) to datetime.datetime(...)
With an exception (note: due to limitations of `doctest`, we can't check
easily both that something is printed and that an exception is raised):
>>> with Stopwatch(print=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 (failed)
<Stopwatch: datetime.timedelta(...)>
>>> try:
... with Stopwatch('abc') as s:
... raise Exception()
... except Exception as exc:
... print(repr(s)) # doctest: +ELLIPSIS
0 ms: abc (failed)
<Stopwatch: datetime.timedelta(...)>
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 stopwatches:
>>> 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(print=None) as s1:
... with Stopwatch('inner') as s2:
... pass
0 ms: inner
>>> with Stopwatch(print=None) as s3:
... pass
>>> overhead = s1.seconds - s3.seconds
>>> assert 0 <= overhead < 0.0001
... # ~20 us on i5@2.60GHz, Python 3.6.0, Linux
Project details
Release history Release notifications | RSS feed
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.3.0.tar.gz
(2.6 kB
view hashes)