SkillAgentSearch skills...

Horology

timing functions, contexts and for-loops

Install / Use

/learn @mjmikulski/Horology
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Horology

PyPI version tests codeql PythonVersion OperatingSystems Downloads License: MIT

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

Installation

| horology version | compatible python | |------------------|-------------------| | 1.4.2 | 3.10-3.14 | | 1.4.1 | 3.10-3.13 | | 1.4 | 3.10-3.12 | | 1.3 | 3.8-3.11 | | 1.2 | 3.6-3.9 | | 1.1 | 3.6-3.8 |

Horology can be installed with PIP. It has no dependencies.

pip install horology

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.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

Customization

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():
    ...

Result:

>>> foo()
foo: 7.12 ms

Customization

Chose time unit and name:

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

Result:

>>> 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: '):
    ...

Result:

Important calculations: 12.4 s

Customization

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

Contributions are welcomed, see contribution guide.

Internals

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

View on GitHub
GitHub Stars88
CategoryDevelopment
Updated5mo ago
Forks3

Languages

Python

Security Score

97/100

Audited on Oct 26, 2025

No findings