hide:
- navigation
Benchmark utils
Utils for benchmark - wrapper over python timeit.
Tested on python 3.10 - 3.14
Install
Install from pypi:
pip install benchmark_utils
Or with uv:
uv pip install benchmark_utils
Or install from github repo:
pip install git+https://github.com/ayasyrev/benchmark_utils.git
For development, use uv:
uv pip install -e .
Basic use.
Lets benchmark some (dummy) functions.
output
```python from time import sleepdef func_to_test_1(sleep_time: float = 0.1, mult: int = 1) -> None: """simple 'sleep' func for test""" sleep(sleep_time * mult)
def func_to_test_2(sleep_time: float = 0.11, mult: int = 1) -> None: """simple 'sleep' func for test""" sleep(sleep_time * mult)
output
Let's create benchmark.
output
```python from benchmark_utils import Benchmark ```output
```python bench = Benchmark( [func_to_test_1, func_to_test_2], ) ```bench
output
Benchmark(func_to_test_1, func_to_test_2)</details>
Now we can benchmark that functions.
# we can run bench.run() or just:
bench()
output
Func name | Sec / run
func_to_test_1: 0.10 0.0%
func_to_test_2: 0.11 -9.1%
We can run it again, all functions, some of it, exclude some and change number of repeats.
bench.run(num_repeats=10)
output
Func name | Sec / run
func_to_test_1: 0.10 0.0%
func_to_test_2: 0.11 -9.1%
After run, we can print results - sorted or not, reversed, compare results with best or not.
bench.print_results(reverse=True)
output
Func name | Sec / run
func_to_test_2: 0.11 0.0%
func_to_test_1: 0.10 10.0%
We can add functions to benchmark as list of functions (or partial) or as dictionary: {"name": function}.
output
```python bench = Benchmark( [ func_to_test_1, partial(func_to_test_1, 0.12), partial(func_to_test_1, sleep_time=0.11), ] ) ```bench
output
Benchmark(func_to_test_1, func_to_test_1(0.12), func_to_test_1(sleep_time=0.11))</details>
bench.run()
output
Func name | Sec / run
func_to_test_1: 0.10 0.0%
func_to_test_1(sleep_time=0.11): 0.11 -9.1%
func_to_test_1(0.12): 0.12 -16.7%
output
```python bench = Benchmark( { "func_1": func_to_test_1, "func_2": func_to_test_2, } ) ```bench
output
Benchmark(func_1, func_2)</details>
When we run benchmark script in terminal, we got pretty progress thanks to rich. Lets run example_1.py from example folder:
BenchmarkIter
With BenchmarkIter we can benchmark functions over iterables, for example read list of files or run functions with different arguments.
output
```python def func_to_test_1(x: int) -> None: """simple 'sleep' func for test""" sleep(0.01)def func_to_test_2(x: int) -> None: """simple 'sleep' func for test""" sleep(0.015)
dummy_params = list(range(10))
<!-- cell -->
<details open> <summary>output</summary>
```python
from benchmark_utils import BenchmarkIter
bench = BenchmarkIter(
func=[func_to_test_1, func_to_test_2],
item_list=dummy_params,
)
```</details>
<!-- cell -->
```python
bench()
output
Func name | Items/sec
func_to_test_1: 97.93
func_to_test_2: 65.25
We can run it again, all functions, some of it, exclude some and change number of repeats.
And we can limit number of items with num_samples argument:
bench.run(num_samples=5)
Multiprocessing
By default we tun functions in one thread.
But we can use multiprocessing with multiprocessing=True argument:
bench.run(multiprocessing=True)
It will use all available cpu cores.
And we can use num_workers argument to limit used cpu cores:
bench.run(multiprocessing=True, num_workers=2)
bench.run(multiprocessing=True, num_workers=2)
output
Func name | Items/sec
func_to_test_1: 173.20
func_to_test_2: 120.80
Metadata
Release files for benchmark-utils 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| benchmark_utils-0.2.5.tar.gz | 7.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| benchmark_utils-0.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.8 kB
Release files / benchmark_utils-0.2.5.tar.gz
| Download URL | benchmark_utils-0.2.5.tar.gz |
|---|---|
| Size | 7.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
efcbeed1ac538fcdf567455434a3ed597c7f7c569f7b921abab2dc5293856778
|
|
BLAKE2b-256 checksum How to use checksums |
13c143d06ae912a289fe324871fc1e267d62d3fd3dc327289682c6b9d51f5b37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / benchmark_utils-0.2.5-py3-none-any.whl
| Download URL | benchmark_utils-0.2.5-py3-none-any.whl |
|---|---|
| Size | 8.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c11ea30ef4988cb259760b7f19c7cc1519137b1267911d023fde42f4a07fe0b9
|
|
BLAKE2b-256 checksum How to use checksums |
a5edd1d3b55bd75adc88cc5cc03cd77b8a480acc279ee758129613a291dcdc4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|