Skip to main content

System-level execution tracer for Python 3.12+ (PEP 669)

Project description

🌐 Also available in: Русская версия

FlowTrace logo

# 🌀 FlowTrace — Visual Execution Tracing for Python 3.12+

FlowTrace is a system-level tracer built on Python’s Monitoring API (PEP 669). It doesn’t “profile time by default”. Instead, it reconstructs what happened in your program — calls, returns, structure — with minimal overhead and zero monkey-patching.

Status: experimental alpha. Python 3.12+ only.


Installation

pip install flowtrace

Quick Start

1) One-line decorator

from flowtrace import trace

@trace
def fib(n):
    return n if n < 2 else fib(n-1) + fib(n-2)

fib(3)

Output:

→ fib(3)
  → fib(2)
    → fib(1) → 1
    → fib(0) → 0
  ← fib(2) → 1
  → fib(1) → 1
← fib(3) → 2

2) Timing when you need it

from flowtrace import trace

@trace(measure_time=True)
def compute(a, b):
    return a * b

compute(6, 7)

Output:

→ compute(6, 7) [0.000265s] → 42

3) Manual session

from flowtrace import start_tracing, stop_tracing, print_tree

def fib(n):
    return n if n < 2 else fib(n-1) + fib(n-2)

start_tracing()
fib(3)
events = stop_tracing()
print_tree(events)

Output:

→ fib()
  → fib()
    → fib()  → 1
    → fib()  → 0
  ← fib()  → 1
  → fib()  → 1
← fib()  → 2

Why FlowTrace?

  • Not a profiler: profilers answer “how long”. FlowTrace answers “what, in which order, and why”.

  • Direct line to the VM: listens to bytecode-level events via sys.monitoring (PEP 669).

  • No code intrusion: no sys.settrace, no monkey-patching, no stdout noise.


API (current)

from flowtrace import trace, start_tracing, stop_tracing, get_trace_data, print_tree
  • @trace(measure_time: bool = True) Decorate a function to include its calls in the trace. When measure_time=True, durations for this function’s calls are recorded.

  • start_tracing() / stop_tracing() -> list[CallEvent] Start/stop a process-wide tracing session. By default no timing is recorded here — only structure.

  • get_trace_data() -> list[CallEvent] Access the last recorded events.

  • print_tree(events) Pretty-print a hierarchical call tree.

Event model (CallEvent):

id: int
kind: str           
func_name: str
parent_id: int | None
args_repr: str | None
result_repr: str | None
duration: float | None    

Design choices (snapshot)

  • Only PY_START / PY_RETURN: we do not listen to CALL to keep the core lean. Argument strings are provided by the decorator right before the call starts.

  • Timing is opt-in: perf_counter() is used only when measure_time=True. Starting/stopping a session alone does not add timing overhead.

  • Filter user code: internal modules and site-packages are excluded from the default output.


Roadmap

  • Async/coroutine transitions.

  • JSON export for post-processing.

  • Include/exclude filters & colorized output.

  • Minimal CLI helpers.


Contributing

We welcome small, surgical PRs. The codebase is intentionally compact to be an approachable learning tool for exploring Python 3.12+ internals.

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

flowtrace-0.1.2.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

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

flowtrace-0.1.2-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file flowtrace-0.1.2.tar.gz.

File metadata

  • Download URL: flowtrace-0.1.2.tar.gz
  • Upload date:
  • Size: 7.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for flowtrace-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7ebe4db5adf9f1562f7255c7351d5feceda91a2bff9d3ec3b6ba448c077d7690
MD5 c6e5bb5d3675a550f850f57b71e6814b
BLAKE2b-256 bf6a241f70a00ea4c5ca29411fd251a8cc5c8d9cba346d00dee9d2e586e8001a

See more details on using hashes here.

File details

Details for the file flowtrace-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: flowtrace-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for flowtrace-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8e0061b4df469818201a459b76c754e0be39a346a1faa1e0896df23138c98ccb
MD5 8034d9dde795455f59d58527aeae9772
BLAKE2b-256 3d83346e25e847ad2bdf87c8e0418eda36d9817c3679b9dd71d128a7fd406811

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