Skip to content

Releases: joerick/pyinstrument

v5.0.0

11 Oct 19:39
Compare
Choose a tag to compare

Loads of improvements to the HTML renderer!

  • Timeline mode - see and zoom into an interactive linear timeline!

    timeline mode

  • HTML mode now has interactive options, rather than needing to set the upfront.

  • Streamlined the design of the HTML page header.

  • HTML Call stack view supports arrow key navigation.

  • The way ‘library’ code is detected has been changed. Previously, if the string ‘/lib/’ occurred in the file path, that was considered library code (and collapsed by default). Now, pyinstrument captures the paths of the Python install and any active virtualenv/conda env at profile time. Files that are stored there are considered library. That should give fewer false positives.

  • Calls to profiler.start() can now pass a target_description parameter, which is displayed in the profile readout.

Check my blog post for more info on the new features.

v4.7.3

06 Sep 11:02
Compare
Choose a tag to compare
  • Fix a bug introduced in 4.7.0 which would cause the profiler to crash when profiling code with unusual locals, notably some pytest extensions (#332)
  • Fix a bug that causes pyinstrument to fail to import packages like glom on Python 3.12 or later, which mutate the locals() dict. (#336)
  • Fix a bug that caused a UnicodeDecodeError on some platforms (#330)
  • Fix a DivideByZero error that occurs in some situations (#335)
  • The IPython integration takes greater step to ensure a clean profile output, by ensuring internal frames are trimmed before printing. (#321)

v4.7.2

05 Aug 11:00
Compare
Choose a tag to compare
  • Add CPython 3.13 wheels
  • Fix a bug that caused the HTML output to fail to render in some browser contexts (#328)

v4.7.0

01 Aug 21:16
Compare
Choose a tag to compare
  • Adds a new, convenient API for profiling chunks of Python code! You can now profile simply using a with block, or a function/method decorator. This will profile the code and print a short readout into the terminal. (#327)
  • Adds new, lower overhead timing options. Pyinstrument calls timers on every Python function call, which is fine on systems with fast timing available, but it adds significant overhead on systems that require a syscall for each, such as some Docker environments. Pyinstrument will now detect slow timers present a warning with two choices. You can enable a 'timing thread', which offloads the timing workload from the profiled thread, or, if you're happy with lower resolution, you can opt to use a 'coarse' timer, which is provided on some Linux systems. (#273)
  • Alt-click rows in the HTML output to collapse/expand the whole tree (#325)
  • Adds a flat argument to the console output, to present a flat list of functions (#294)
  • Adds a Litestar example config and docs (#284)
  • Preliminary Python 3.13 support (#322)

v4.6.0

12 Oct 08:46
Compare
Choose a tag to compare
  • Adds a feature -c, which allows profiling code directly from the command line, like python -c. (#271)
  • Adds a convenience method Profiler.write_html, for writing HTML output to a file directly. (#266)

v4.5.3

07 Sep 19:19
Compare
Choose a tag to compare
  • Fix a problem in the packaging process that prevented upload to PyPI

v4.5.2

01 Sep 10:36
Compare
Choose a tag to compare
  • Show the program name in the header of the HTML output (#260)
  • Improve program name capture through resilience to other programs modifying sys.argv (#258)
  • Add support for Python 3.12 (#246)

v4.5.1

01 Sep 10:36
Compare
Choose a tag to compare
  • Fix a bug that caused [X frames hidden] in the output when frames were deleted due to __tracebackhide__ (#255)
  • Fix a bug causing built-in code to display the filepath None in the console output (#254)
  • Some docs improvements (#251)

v4.5.0

05 Jun 21:27
Compare
Choose a tag to compare
  • Adds a flat mode to the console renderer, which can be enabled by passing -p flat on the command line. This mode shows the heaviest frame as measured by self-time, which can be useful in some codebases. (#240)
  • Adds the ability to save pstats files. This is the file format used by cprofile in the stdlib. It's less detailed than pyinstrument profiles, but it's compatible with more tools. (#236)
  • Fixes a detail of the --show-all option - pyinstrument will no longer remove Python-internal frames when this option is supplied. (#239)
  • Internally to the HTML renderer, it now uses Svelte to render the frontend, meaning profile HTML files bundle less javascript and so are smaller. (#222)