Python package that renders pyinstrument profiles as flamegraphs, using the inferno rust crate.
Install from PyPi:
pip install pyinferno
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()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.pyFor convenience, pyinferno includes its own script which wraps the pyinstrument CLI:
pyinferno slow.pyIf 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.pyTo profile a python module, pass the -m argument:
pyinferno -m pytest -k slow_test
