Skip to main content

Detect Python performance regressions and compare execution traces with lightweight call graph visualization

Project description

OracleTrace — Detect Python Performance Regressions with Execution Diff

Detect performance regressions between runs of your Python script in seconds.

OracleTrace Logo

Fail your CI when performance regresses.

OracleTrace is a git diff for performance.

Run your script twice and instantly see what got slower — with function-level precision.

PyPI PyPI Downloads GitHub Stars GitHub Forks CI Tests

Documentation: https://kaykcaputo.github.io/oracletrace/

Featured in: PyCoder's Weekly #729Python技术周刊 #15Python技术周刊 #16Python技术周刊 #17awesome-debuggerawesome-profiling


Installation

pip install oracletrace

Quick Start

1. See where your program spends time instantly:

oracletrace app.py

2. Compare runs and detect regressions:

oracletrace app.py --json baseline.json
oracletrace app.py --json new.json --compare baseline.json

See it in action

See exactly which functions got slower between runs:

OracleTrace CLI demo


Example Output

Starting application...

Iteration 1:
  > Processing data...
    > Calculating results...

Iteration 2:
  > Processing data...
    > Calculating results...

Application finished.

Summary:
                         Top functions by Total Time
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ Function                     ┃ Total Time (s) ┃ Calls ┃ Avg. Time/Call (ms) ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩
│ my_app.py:main               │         0.6025 │     1 │             602.510 │
│ my_app.py:process_data       │         0.6021 │     2 │             301.050 │
│ my_app.py:calculate_results  │         0.4015 │     2 │             200.750 │
└──────────────────────────────┴────────────────┴───────┴─────────────────────┘

Logic Flow:
<module>
└── my_app.py:main (1x, 0.6025s)
    └── my_app.py:process_data (2x, 0.6021s)
        └── my_app.py:calculate_results (2x, 0.4015s)

Why OracleTrace?

Problem

Performance regressions are hard to detect early.

Solution

OracleTrace compares execution traces and highlights what got slower.

How it works

  1. Run your script
  2. Generate a trace
  3. Compare results
  4. Identify slowdowns

CI Integration

Fail your pipeline when performance degrades:

oracletrace app.py --json current.json --compare baseline.json --fail-on-regression --threshold 25

Add it to your CI to automatically fail on performance regressions.


Key Features

  • Detect slower and faster functions
  • Identify new or removed functions
  • Execution time and call count analysis
  • Call graph visualization
  • JSON and CSV export
  • Regex-based filtering (--ignore)
  • Top-N function focus (--top)
  • CI regression gates

CLI Reference

Flag Description
--json Export trace to JSON
--csv Export trace to CSV
--html Export trace to html
--compare Compare with another trace
--fail-on-regression Exit with error if regression detected
--threshold Regression percentage threshold
--ignore Ignore functions/files via regex
--top Show top N functions
--repeat Repeat the tracing N times

Use Cases

Primary

  • Detect performance regressions between runs

Secondary

  • CI performance validation
  • Execution trace inspection
  • Call graph visualization

How It Works

OracleTrace uses Python’s sys.setprofile() to intercept function calls and returns.

It measures execution time per function and records caller–callee relationships.

Filtering removes external/internal calls to focus on application code.


Requirements

  • Python >= 3.11
  • rich

Contributing

Contributions are welcome.

Please read the Contributing Guide for details on how to get started, coding standards, and the contribution process.


Contributors


⭐ Support the Project

If OracleTrace is useful, consider giving it a star:

GitHub Repository


Maintainers

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oracletrace-3.0.0.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

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

oracletrace-3.0.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file oracletrace-3.0.0.tar.gz.

File metadata

  • Download URL: oracletrace-3.0.0.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for oracletrace-3.0.0.tar.gz
Algorithm Hash digest
SHA256 6f175fd7b0fe0eb7e9c9f050388b2cb4d7d18ceb55bc3376ebaa33a56e141136
MD5 8cae09803ca121b27e8b43bd2c3b44e7
BLAKE2b-256 c12b29f4137aae3f1564a6c3a792b00eb005a3b1b69a1d0e6654e634cbefc89c

See more details on using hashes here.

File details

Details for the file oracletrace-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: oracletrace-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for oracletrace-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 210a6933dbaeba540cf404b3ed7381e68e6e1bf7ff71f04f3053b877290805a0
MD5 a8b6265cf3d06bcd8e734bd90f982f33
BLAKE2b-256 30b690d869192e27e9cb0e762c7dcaafa1a3a43d9dc80f0936acc833f59f0fc1

See more details on using hashes here.

Supported by

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