Skip to content

Flamegraph renderer for pyinstrument python profiles

License

Notifications You must be signed in to change notification settings

mrob95/pyinferno

Repository files navigation

PyInferno

Python package that renders pyinstrument profiles as flamegraphs, using the inferno rust crate.

Example command line usage Example output

Installation

Install from PyPi:

pip install pyinferno

Usage

Context manager

To profile a specific piece of code, you can use the pyinstrument Profiler class, then render the result using pyinferno's InfernoRenderer:

from pyinstrument.profiler import Profiler
from pyinferno import InfernoRenderer
import time

def slow():
    time.sleep(0.5)

with Profiler() as profiler:
    slow()

output = profiler.output(InfernoRenderer(title="slow"))

with open("flamegraph.svg", "w+") as f:
    f.write(output)

For convenience, the same result can be achieved using the InfernoProfiler context manager:

from pyinferno import InfernoProfiler
import time

def slow():
    time.sleep(0.5)

with InfernoProfiler(file="flamegraph.svg", auto_open=True, title="slow"):
    slow()

Command-line

To profile a Python script, you can pass pyinferno.Renderer as the renderer to the pyinstrument CLI:

pyinstrument -r pyinferno.Renderer -o flamegraph.svg slow.py

For convenience, pyinferno includes its own script which wraps the pyinstrument CLI:

pyinferno slow.py

If no output file is specified, the flamegraph will be written to a temporary file and automatically opened using python's webbrowser module. To save the flamegraph to a file, pass the -o option:

pyinferno -o flamegraph.svg slow.py

To profile a python module, pass the -m argument:

pyinferno -m pytest -k slow_test