benchdiff
A CLI benchmarking tool with rich terminal output and markdown export.
Installation
pip install benchdiff
Usage
Create a file named bench_*.py and define a __benchmarks__ list:
# bench_strings.py
words = ["hello", "world", "foo", "bar"]
def concat():
result = ""
for w in words:
result += w
def join():
"".join(words)
def format_string():
"%s %s %s %s" % tuple(words)
def fstring():
f"{words[0]} {words[1]} {words[2]} {words[3]}"
__benchmarks__ = [
("String concatenation", [concat, join]),
("String formatting", [format_string, fstring]),
]
Run benchmarks:
benchdiff benchmarks/
╭──────────────────────────────── benchdiff ────────────────────────────────╮
│ │
│ Benchmark Min Median Max × │
│ ─────────────────────────────────────────────────────────────────────── │
│ String concatenation │
│ concat 78.333ns 80.833ns 97.750ns 1.711x │
│ join 44.250ns 47.250ns 53.125ns 1.000x │
│ String formatting │
│ format_string 103.834ns 110.417ns 114.708ns 1.464x │
│ fstring 75.000ns 75.417ns 76.083ns 1.000x │
│ │
│ * times in nanoseconds, lower is better │
│ ───────────────────────────────────────────────────────────────────────── │
│ Python 3.14.2 │
│ Platform macOS-26.3.1 │
│ CPU Apple M3 Pro │
│ Rounds 5 × 1,000 calls │
│ Date 2026-05-08 10:05:59 │
╰───────────────────────────────────────────────────────────────────────────╯
CLI options
benchdiff [PATH] [OPTIONS]
Arguments:
PATH Path to search for bench_*.py files [default: .]
Options:
--repeat Number of measurement loops [default: 5]
--times Number of calls per measurement [default: 1000]
--markdown Output as GFM markdown table
--help Show this message and exit.
Markdown output
benchdiff benchmarks/ --markdown
| Benchmark | Min | Median | Max | × |
|---|---|---|---|---|
| String concatenation | ||||
| concat | 84.875ns | 94.250ns | 157.792ns | 1.879x |
| join | 50.042ns | 50.167ns | 52.166ns | 1.000x |
| String formatting | ||||
| format_string | 113.833ns | 115.083ns | 118.750ns | 1.539x |
| fstring | 72.375ns | 74.791ns | 84.583ns | 1.000x |
times in nanoseconds, lower is better
Python 3.14.2 · macOS-26.3.1 · Apple M3 Pro · 5 × 1,000 rounds · 2026-05-08 11:14:38
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
benchdiff-0.3.0.tar.gz
(5.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file benchdiff-0.3.0.tar.gz.
File metadata
- Download URL: benchdiff-0.3.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fca4dd6d5fda7c2c409842c28631c40aeedcc7607fe600a0e418f66b5a21641b
|
|
| MD5 |
9068b373aa07e13c9f4fa4fbdf1f6610
|
|
| BLAKE2b-256 |
e520f4b57f07a428f80f8062dc65129faf0a954ac856fba11e4792d502da7cb4
|
File details
Details for the file benchdiff-0.3.0-py3-none-any.whl.
File metadata
- Download URL: benchdiff-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d634dcfa563d168bd1d146157a82ba4f208d75c6183393340db337a75096f975
|
|
| MD5 |
37879e243d7f2a1570a221a258c72a3a
|
|
| BLAKE2b-256 |
83d1a372f9be53fc93432c620254f245b706bee7e529f53b605fe6ad26acae5d
|