Skip to main content

measure time conveniently

Project description

Horology

Language grade: Python Total alerts Downloads PyPI version

CircleCI

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

Instalation

Simply:

pip install horology

Tested with python 3.6, 3.7 and 3.8.

Usage

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)

Result:

iteration    1: 12.00 s
iteration    2: 8.00 s
iteration    3: 100.00 s

total 3 iterations in 120.00 s
min/median/max: 8.00/12.00/100.00 s
average (std): 40.00 (52.00) 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

@timed
def foo():
    pass

Result:

>>> foo()
foo: 7.12 ms

More cool stuff:

Personalize time unit and name

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

Result:

>>> bar()
Processing took 0.18 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: '):
    pass

Result:

Important calculations: 12.43 s

More cool stuff:

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

with Timing(print_fn=None) as t:
    pass

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

Contributions are welcomed, see contribution guide.

Internals

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

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 horology, version 1.1.0
Filename, size File type Python version Upload date Hashes
Filename, size horology-1.1.0-py3-none-any.whl (6.8 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size horology-1.1.0.tar.gz (5.0 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 DigiCert DigiCert EV certificate StatusPage StatusPage Status page