Conveniently measures the time of your loops, contexts and functions.



pip install horology

Works with python versions 3.6, 3.7, 3.8 and 3.9. Tested on Linux, Windows and MacOS.


The following 3 tools will let you measure practically any part of your Python code.

Timing an iterable (list, tuple, generator, etc)

Quick example

from horology import Timed animals = ['cat', 'dog', 'crocodile'] for x in Timed(animals): feed(x)


iteration    1: 12.0 s
iteration    2: 8.00 s
iteration    3: 100 s

total 3 iterations in 120 s
min/median/max: 8.00/12.0/100 s
average (std): 40.0 (52.0) s

More cool stuff:

You can specify where (if at all) you want each iteration and summary to be printed, eg.:

for x in Timed(animals, unit='ms', iteration_print_fn=logger.debug, summary_print_fn=logger.info): feed(x)

Timing a function with a @timed decorator

Quick example

from horology import timed @timeddef foo(): ...


>>> foo()
foo: 7.12 ms

More cool stuff:

Personalize time unit and name

@timed(unit='s', name='Processing took ')def bar(): ...


>>> bar()
Processing took 0.185 s

Timing part of code with a Timing context

Quick example

Just wrap your code using a with statement

from horology import Timing with Timing(name='Important calculations: '): ...


Important calculations: 12.4 s

More cool stuff:

You can suppress default printing and directly use measured time (also within context)

with Timing(print_fn=None) as t: ... make_use_of(t.interval)

Time units

Time units are by default automatically adjusted, for example you will see foo: 7.12 ms rather than foo: 0.007 s. If you don't like it, you can override this by setting the unit argument with one of these names: ['ns', 'us', 'ms', 's', 'min', 'h', 'd'].


Contributions are welcomed, see contribution guide.


Horology internally measures time with perf_counter which provides the highest available resolution, see docs.

GitHub - mjmikulski/horology: timing functions, contexts and for-loops
timing functions, contexts and for-loops. Contribute to mjmikulski/horology development by creating an account on GitHub.