Skip to main content

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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

benchdiff-0.3.0-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

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

Hashes for benchdiff-0.3.0.tar.gz
Algorithm Hash digest
SHA256 fca4dd6d5fda7c2c409842c28631c40aeedcc7607fe600a0e418f66b5a21641b
MD5 9068b373aa07e13c9f4fa4fbdf1f6610
BLAKE2b-256 e520f4b57f07a428f80f8062dc65129faf0a954ac856fba11e4792d502da7cb4

See more details on using hashes here.

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

Hashes for benchdiff-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d634dcfa563d168bd1d146157a82ba4f208d75c6183393340db337a75096f975
MD5 37879e243d7f2a1570a221a258c72a3a
BLAKE2b-256 83d1a372f9be53fc93432c620254f245b706bee7e529f53b605fe6ad26acae5d

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page