Skip to main content

Call stack profiler for Python. Shows you why your code is slow!

Project description

pyinstrument

PyPI version .github/workflows/test.yml Build wheels

Documentation

Screenshot

Pyinstrument is a Python profiler. A profiler is a tool to help you optimize your code - make it faster. To get the biggest speed increase you should focus on the slowest part of your program. Pyinstrument helps you find it!

☕️ Not sure where to start? Check out this video tutorial from calmcode.io!

Installation

pip install pyinstrument

Pyinstrument supports Python 3.7+.

To run Pyinstrument from a git checkout, there's a build step. Take a look at Contributing for more info.

Documentation

To learn how to use pyinstrument, or to check the reference, head to the documentation.

Known issues

  • Profiling code inside a Docker container can cause some strange results, because the gettimeofday syscall that pyinstrument uses is slow in that environment. See #83
  • When using pyinstrument script.py where script.py contains a class serialized with pickle, you might encounter errors because the serialisation machinery doesn't know where __main__ is. See this issue for workarounds

Changelog

v4.2.0

  • Adds a command-line option -p --render-option that allows arbitrary setting of render options. This lets you set options like filter_threshold from the command line, by doing something like pyinstrument -p processor_options.filter_threshold=0.

    Here's the help output for the option:

      -p RENDER_OPTION, --render-option=RENDER_OPTION
                        options to pass to the renderer, in the format
                        'flag_name' or 'option_name=option_value'. For
                        example, to set the option 'time', pass '-p
                        time=percent_of_total'. To pass multiple options, use
                        the -p option multiple times. You can set processor
                        options using dot-syntax, like '-p
                        processor_options.filter_threshold=0'. option_value is
                        parsed as a JSON value or a string.
    
  • Adds the ability to view times in the console output as percentages, rather than absolute times. Use the ConsoleRenderer option time='percent_of_total', or on the command line, use -p, like pyinstrument -p time=percent_of_total.

  • Adds command line options for loading and saving pyinstrument sessions. You can save the raw data for a pyinstrument session with -r session, like pyinstrument -r session -o session.pyisession myscript.py. Loading is via --load, e.g. pyinstrument --load session.pyisession.

  • Command line output format is inferred from the -o output file extension. So if you do pyinstrument -o profile.html myscript.py, you don't need to supply -r html, pyinstrument will automatically use the HTML renderer. Or if you do pyinstrument -o profile.pyisession myscript.py, it will save a raw session object.

  • Adds usage examples for FastAPI and pytest to the documentation.

  • Fixes a bug causing NotImplementedError when using async_mode=strict.

  • Adds support for Python 3.11

v4.1.1

  • Fixed an issue causing PYINSTRUMENT_PROFILE_DIR_RENDERER to output the wrong file extension when used with the speedscope renderer.

v4.1.0

  • You can now use pyinstrument natively in an IPython notebook! Just use %load_ext pyinstrument at the top of your notebook, and then %%pyinstrument in the cell you want to profile.
  • Added support for the speedscope format. This provides a way to view interactive flamecharts using pyinstrument. To use, profile with pyinstrument -r speedscope, and upload to the speedscope web app.
  • You can now configure renderers for the Django middleware file output, using the PYINSTRUMENT_PROFILE_DIR_RENDERER option.
  • Added wheels for Linux aarch64 (64-bit ARM).

v4.0.4

  • Fix a packaging issue where a package called 'test' was installed alongside pyinstrument
  • Use more modern C APIs to resolve deprecation warnings on Python 3.10.
  • Minor docs fixes

v4.0.3

  • CPython 3.10 support
  • Improve error messages when trying to use Profiler from multiple threads
  • Fix crash when rendering sessions that contain a module in a FrameGroup

v4.0.2

  • Fix some packaging issues

v4.0.0

  • Async support! Pyinstrument now detects when an async task hits an await, and tracks time spent outside of the async context under this await.

    So, for example, here's a simple script with an async task that does a sleep:

    import asyncio
    from pyinstrument import Profiler
    
    async def main():
        p = Profiler(async_mode='disabled')
    
        with p:
            print('Hello ...')
            await asyncio.sleep(1)
            print('... World!')
    
        p.print()
    
    asyncio.run(main())
    

    Before Pyinstrument 4.0.0, we'd see only time spent in the run loop, like this:

      _     ._   __/__   _ _  _  _ _/_   Recorded: 18:33:03  Samples:  2
     /_//_/// /_\ / //_// / //_'/ //     Duration: 1.006     CPU time: 0.001
    /   _/                      v3.4.2
    
    Program: examples/async_example_simple.py
    
    1.006 _run_once  asyncio/base_events.py:1784
    └─ 1.005 select  selectors.py:553
          [3 frames hidden]  selectors, <built-in>
             1.005 kqueue.control  <built-in>:0
    

    Now, with pyinstrument 4.0.0, we get:

      _     ._   __/__   _ _  _  _ _/_   Recorded: 18:30:43  Samples:  2
     /_//_/// /_\ / //_// / //_'/ //     Duration: 1.007     CPU time: 0.001
    /   _/                      v4.0.0
    
    Program: examples/async_example_simple.py
    
    1.006 main  async_example_simple.py:4
    └─ 1.005 sleep  asyncio/tasks.py:641
          [2 frames hidden]  asyncio
             1.005 [await]
    

    For more information, check out the async profiling documentation and the Profiler.async_mode property.

  • Pyinstrument has a documentation site, including full Python API docs!

v3.4.2

  • Fix a bug that caused --show, --show-regex, --show-all to be ignored on the command line.

v3.4.1

  • Under-the-hood modernisation

v3.4.0

  • Added timeline option (boolean) to Profiler methods output_html() and open_in_browser().

v3.3.0

  • Fixed issue with pyinstrument -m module, where pyinstrument wouldn't find modules in the current directory.
  • Dropped support for Python 2.7 and 3.5. Old versions will remain available on PyPI, and pip should choose the correct one automatically.

v3.2.0

  • Added the ability to track time in C functions. Minor note - Pyinstrument will record time spent C functions as 'leaf' functions, due to a limitation in how Python records frames. Python -> C -> Python is recorded as Python -> Python, but Python -> Python -> C will be attributed correctly. (#103)

v3.1.2

  • Fix <__array_function__ internals> frames appearing as app code in reports

v3.1.1

  • Added support for timeline mode on HTML and JSON renderers
  • Released as a tarball as well as a universal wheel

v3.1.0

  • Added PYINSTRUMENT_SHOW_CALLBACK option on the Django middleware to add a condition to showing the profile (could be used to run pyinstrument on a live server!)
  • Fixed bug in the Django middleware where file would not be written because of a unicode error

v3.0.3

  • Fixed bug with the Django middleware on Windows where profiling would fail because we were trying to put an illegal character '?' in the profile path. (#66)

v3.0.2

  • Add --show and --show-regex options, to mark certain files to be displayed. This helps to profile inside specific modules, while hiding others. For example, pyinstrument --show '*/sympy/*' script.py.

v3.0.1

  • Fix #60: pass all arguments after -m module_name to the called module
  • Fix crash during HTML/JSON output when no frames were captured.

v3.0.0

  • Pyinstrument will now hide traces through libraries that you're using by default. So instead of showing you loads of frames going through the internals of something external e.g. urllib, it lets you focus on your code.

    Before After
    image image

    To go back to the old behaviour, use --show-all on the command line.

  • 'Entry' frames of hidden groups are shown, so you know which call is the problem

  • Really slow frames in the groups are shown too, e.g. the 'read' call on the socket

  • Application code is highlighted in the console

  • Additional metrics are shown at the top of the trace - timestamp, number of samples, duration, CPU time

  • Hidden code is controlled by the --hide or --hide-regex options - matching on the path of the code files.

      --hide=EXPR           glob-style pattern matching the file paths whose
                            frames to hide. Defaults to '*/lib/*'.
      --hide-regex=REGEX    regex matching the file paths whose frames to hide.
                            Useful if --hide doesn't give enough control.
    
  • Outputting a timeline is supported from the command line.

      -t, --timeline        render as a timeline - preserve ordering and don't
                            condense repeated calls
    
  • Because there are a few rendering options now, you can load a previous profiling session using --load-prev - pyinstrument keeps the last 10 sessions.

  • Hidden groups can also call back into application code, that looks like this:

    image

  • (internal) When recording timelines, frame trees are completely linear now, allowing for the creation of super-accurate frame charts.

  • (internal) The HTML renderer has been rewritten as a Vue.js app. All the console improvements apply to the HTML output too, plus it's interactive.

  • (internal) A lot of unit and integration tests added!

Yikes! See #49 for the gory details. I hope you like it.

v2.3.0

  • Big refactor!
    • Recorders have been removed. The frame recording is now internal to the Profiler object. This means the 'frame' objects are more general-purpose, which paves the way for...
    • Processors! These are functions that mutate the tree to sculpt the output. They are used by the renderers to filter the output to the correct form. Now, instead of a time-aggregating recorder, the profiler just uses timeline-style recording (this is lower-overhead anyway) and the aggregation is done as a processing step.
    • The upshot of this is that it's now way easier to alter the tree to filter stuff out, and do more advanced things like combining frames that we don't care about. More features to come that use this in v3.0!
  • Importlib frames are removed - you won't see them at all. Their children are retained, so imports are just transparent.
  • Django profile file name is now limited to a hundred of characters (#50)
  • Fix bug with --html option (#53)
  • Add --version command line option

v2.2.1

  • Fix crash when using on the command line.

v2.2.0

  • Added support for JSON output. Use pyinstrument --renderer=json scriptfile.py. PR

  • @iddan has put together an interactive viewer using the JSON output!

    image

  • When running pyinstrument --html and you don't pipe the output to a file, pyinstrument will write the console output to a temp file and open that in a browser.

v2.1.0

  • Added support for running modules with pyinstrument via the command line. The new syntax is the -m flag e.g. pyinstrument -m module_name! PR

v2.0.4

v2.0.3

  • Pyinstrument can now be used in a with block.

    For example:

    profiler = pyinstrument.Profiler()
    with profiler:
        # do some work here...
    print(profiler.output_text())
    
  • Middleware fix for older versions of Django

v2.0.2

  • Fix for max recursion error when used to profile programs with a lot of frames on the stack.

v2.0.1

  • Ensure license is included in the sdist.

v2.0.0

  • Pyinstrument uses a new profiling mode. Rather than using signals, pyintrument uses a new statistical profiler built on PyEval_SetProfile. This means no more main thread restriction, no more IO errors when using Pyinstrument, and no need for a separate more 'setprofile' mode!

  • Renderers. Users can customize Pyinstrument to use alternative renderers with the renderer argument on Profiler.output(), or using the --renderer argument on the command line.

  • Recorders. To support other use cases of Pyinstrument (e.g. flame charts), pyinstrument now has a 'timeline' recorder mode. This mode records captured frames in a linear way, so the program execution can be viewed on a timeline.

v0.13

  • pyinstrument command. You can now profile python scripts from the shell by running $ pyinstrument script.py. This is now equivalent to python -m pyinstrument. Thanks @asmeurer!

v0.12

  • Application code is highlighted in HTML traces to make it easier to spot

  • Added PYINSTRUMENT_PROFILE_DIR option to the Django interface, which will log profiles of all requests to a file the specified folder. Useful for profiling API calls.

  • Added PYINSTRUMENT_USE_SIGNAL option to the Django interface, for use when signal mode presents problems.

Contributing

To setup a dev environment:

virtualenv --python=python3 env
. env/bin/activate
pip install --upgrade pip
pip install -r requirements-dev.txt
pre-commit install --install-hooks

To get some sample output:

pyinstrument examples/wikipedia_article_word_count.py

To run the tests:

pytest

To run linting checks locally:

pre-commit run --all-files

Some of the pre-commit checks, like isort or black, will auto-fix the problems they find. So if the above command returns an error, try running it again, it might succeed the second time :)

Running all the checks can be slow, so you can also run checks individually, e.g., to format source code that fails isort or black checks:

pre-commit run --all-files isort
pre-commit run --all-files black

To diagnose why pyright checks are failing:

pre-commit run --all-files pyright

The HTML renderer Vue.js app

The HTML renderer works by embedding a JSON representation of the sample with a Javascript 'bundle' inside an HTML file that can be viewed in any web browser.

To edit the html renderer style, do:

cd html_renderer
npm ci
npm run serve

When launched without a top-level window.profileSession object, it will fetch a sample profile so you can work with it.

To compile the JS app and bundle it back into the pyinstrument python tool:

bin/build_js_bundle.py [--force]

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

pyinstrument-4.2.0.tar.gz (373.1 kB view details)

Uploaded Source

Built Distributions

pyinstrument-4.2.0-cp310-cp310-win_amd64.whl (99.0 kB view details)

Uploaded CPython 3.10 Windows x86-64

pyinstrument-4.2.0-cp310-cp310-win32.whl (98.3 kB view details)

Uploaded CPython 3.10 Windows x86

pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl (115.7 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_i686.whl (115.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_aarch64.whl (115.8 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

pyinstrument-4.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (112.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pyinstrument-4.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pyinstrument-4.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (111.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pyinstrument-4.2.0-cp310-cp310-macosx_10_9_x86_64.whl (95.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pyinstrument-4.2.0-cp310-cp310-macosx_10_9_universal2.whl (100.3 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

pyinstrument-4.2.0-cp39-cp39-win_amd64.whl (99.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

pyinstrument-4.2.0-cp39-cp39-win32.whl (98.3 kB view details)

Uploaded CPython 3.9 Windows x86

pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_x86_64.whl (115.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_i686.whl (114.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_aarch64.whl (115.4 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

pyinstrument-4.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (112.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pyinstrument-4.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (111.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pyinstrument-4.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (110.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pyinstrument-4.2.0-cp39-cp39-macosx_10_9_x86_64.whl (95.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pyinstrument-4.2.0-cp39-cp39-macosx_10_9_universal2.whl (100.3 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

pyinstrument-4.2.0-cp38-cp38-win_amd64.whl (98.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

pyinstrument-4.2.0-cp38-cp38-win32.whl (98.2 kB view details)

Uploaded CPython 3.8 Windows x86

pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_x86_64.whl (115.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_i686.whl (114.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_aarch64.whl (115.2 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

pyinstrument-4.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (111.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pyinstrument-4.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (110.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pyinstrument-4.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (110.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pyinstrument-4.2.0-cp38-cp38-macosx_10_9_x86_64.whl (95.5 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pyinstrument-4.2.0-cp38-cp38-macosx_10_9_universal2.whl (99.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

pyinstrument-4.2.0-cp37-cp37m-win_amd64.whl (98.8 kB view details)

Uploaded CPython 3.7m Windows x86-64

pyinstrument-4.2.0-cp37-cp37m-win32.whl (98.2 kB view details)

Uploaded CPython 3.7m Windows x86

pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl (114.7 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_i686.whl (114.4 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl (114.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ ARM64

pyinstrument-4.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (110.2 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

pyinstrument-4.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (109.5 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pyinstrument-4.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (108.9 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pyinstrument-4.2.0-cp37-cp37m-macosx_10_9_x86_64.whl (95.4 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file pyinstrument-4.2.0.tar.gz.

File metadata

  • Download URL: pyinstrument-4.2.0.tar.gz
  • Upload date:
  • Size: 373.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pyinstrument-4.2.0.tar.gz
Algorithm Hash digest
SHA256 6de7d015bc2caf07ee49e82f4a37331d5c40efe7ddf6ff82c19504d8d8ca9772
MD5 52370098f1cc13c5caacc74d6dcba99f
BLAKE2b-256 ddcea57ca0f728f1be95267ba3a2f9f06aab4045d83ad2424545b3995c41abc1

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b04f689897f4cbe301585231c0e94d42c5b1ea76a76b007a600d049dfc9b9073
MD5 17096d44fe9ea1e9681e0195b5ddfa74
BLAKE2b-256 7dc8ebffe821a8470055a98f2c376d8ca1d6ac029cf0734a6c3f7e108e232d8d

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 9b1c9fa015e6353d24a46d46aed3b970a94f5729dd140a4eb97fca1456cd754a
MD5 e692fcf95f5734092f80fe95f89a6560
BLAKE2b-256 8a7ef44b9fc583d56ded16c335e74654ebb151427e720a489058bbc4a999208d

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 233e258a440ca7da837b9b0e7db7ec67c6b979d074b27b9383cef127e4a1deac
MD5 a37fc3ecba15391b79ad87588ad65700
BLAKE2b-256 d321910cd2dd94a9dd0e8bd565427ae9c9ae8e0e759107fa00ca2acd95bcf38b

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 c026868bd559ec5074618717b27528f1b1618946df8ece7ceda43a2828c911ec
MD5 8694a47f8f71a6e785090218e2320452
BLAKE2b-256 b75b1de2fc79552068d577956ae667d9c36f8ca9e14675dc4a50a1903ea0e82d

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 89ee3425f4804c1b8fe0cb740502a50a5825e400100dd07f4a245eeff99da6af
MD5 f39502d6c923feec9111b4b88aa57ec1
BLAKE2b-256 b30ee06ab615b28df733aa75eaba47101b56d7c0bd5124ebd32b954b95ee7898

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f2702f043e6ccc02720076fdc4bc86de50d2a465bd72393251dd5eea5a5ac821
MD5 fd682dd22c8c057c64db168de9f0d88e
BLAKE2b-256 9c4828a191c381ec87e34f2fe57df21ba2f7e6fadb1aacdd3b151d06a385cbff

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54dea5f138f02d42b298e9742a1e6123c6732427b26bae5da0535fb4eb57c226
MD5 c859666c434842fcf7f204c4bd47ffbc
BLAKE2b-256 19f3e824e3352e4d38d722ee3ef39d1721c9084866bcceadef32bf78cbe173e5

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ea53704ffbbdc2235843c10ec5fa39a35220452f46ea4e7cb02d611b0161ced4
MD5 462e1f7fd76f178b4593ad880b83a465
BLAKE2b-256 67b45ca2a425e64c400a717620a23c49743407bfb773a9c0affa60491c4af287

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 af08fe984cab0aa552a2feafc9a3417aee3181e170a24219e112555d0cc861e7
MD5 5ab6b66f2ec4dc8649c0064b7a0131f4
BLAKE2b-256 6cc99441b3c925507d56b896253a96c35140a982acaf2c061abb25f45806df5c

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 df7cd8a71e368694789517dd5466fd2573f59d912019b2928dd113e5408f3c2e
MD5 69c7c11774d9b87eed2007afb5804655
BLAKE2b-256 17c6e2e7a6f67ca81ecb12ce3cd53cbf3cad589a2c1ad3f3dbca16216cf4548d

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 48d37b323de5ee75b44ebd9a3864394e37e413e5e3afcfc37ffa052e688e13de
MD5 bf12ba00722443b0b3c144a5b9587f72
BLAKE2b-256 62d7956d0c75ec7c6d731f90f8a5e9445d24e346040d68dd2e932084f34c5a68

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: pyinstrument-4.2.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 98.3 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 e88e6668be7e5c6e9766b3c43fe374854a2cbeaf95a76b757cfb04385e03f098
MD5 f026e8c27cf8d41b26534109c073117b
BLAKE2b-256 81c47c1102ee8571fa9a47155054d87cc4591ad1ed028f9b1fd2a1fd0a8fd8d9

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 1c256a741c61bd70dfd8c7ce06ff9ad6e6aaecb2aad68d0e7c3d0b05708451ec
MD5 6efba3f91c9ba55bb57f74e81e64f616
BLAKE2b-256 4f42c532a9f9e293d6930e440fc2f95e701c82b0fe5070b9ee7dd48301cdac60

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a464d866126fa4a01dd1ec2ae863b190ec073d17d47d152d76eb0045f9462a12
MD5 88bf18eb804b11685931fdb2f612d53a
BLAKE2b-256 714bb348fbf2aee494c22c191e1a83e47b672c0e9f6c7fbb28af63598f08a372

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 dbaa006ca080054ed1d6fad31cdfa69a26909fdceb8dade591dc5337d90f6b81
MD5 799724dedb8d2bbca803d1c305e5e33b
BLAKE2b-256 7413d044063c4aeb8e63e3a77b58203b6d65a6b87b37f7f0b59b264e85ad3dd0

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6dec46f3a47fc65030c1ae334946d9bda6993c3b4f346bf652e60b40336b90c2
MD5 c3599752df0c3048c8352b8f174c6e89
BLAKE2b-256 05afe59b12da93555259fb35afac3076af49f74c0e9de92b075f677d62354d6d

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 577a68a55ea97104fa24d0c3a99ab6219f117c56f75fea137bddfdf0a0186907
MD5 bf200fd4bab3a97bb30dc79d34d2e3b5
BLAKE2b-256 5a671808896317d6c9ab198dc7e2c94513c3636f019f5f04ba96daf4f72a3e84

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8e43d83d96837b887f0c3874bd9c64a8e67c4912740d0639bda70316eb8a9474
MD5 44001db0a20a25d76a4a0e04687760d9
BLAKE2b-256 75857f11b7548141695fdca91dab852b01cc164058531189c1942c719f2e0516

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6b17418f126fb5dbfdd00475a0017169162195276fdeecd0c9a3c56f789175dd
MD5 21e1132c04411442ffea1b0f941f9f6b
BLAKE2b-256 a9bd8f579e1e873ff2cd22693b1250a8aae1627c4bac43b86d4a13d384e9d9f4

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b08dc76846a6e76858f1c97443fb6385f3e4c181ea92469ded70e334a4d85210
MD5 f05283f162cae474e25f841819eb8cd7
BLAKE2b-256 3c523b84ee178681f48bcc93cf7f33d2ed7de9e049212dc3597554059aae89c6

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 09dcc810497df6660c5210fbf615da52f2fa2dc1594fb34a292fa854d59e1eb6
MD5 7a0e72530655c7680db05e7aacb250af
BLAKE2b-256 6d95ec19202bd98e4949b06e54066535d0d7bda3ca2a75bd5cf19a394706b5f1

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: pyinstrument-4.2.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 98.2 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 a28380a2ab9cf46510c7fec8071523c260036926f874c5291731b713a3458979
MD5 186f35772cd4c763610920a5e39b8622
BLAKE2b-256 5e1a677726d3d7cd4bb581c08ee0d3a4a52c1f52d73f4f1866d71d3e002d1a43

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 67613b0009edbc68c7e10ba838dde541a74d73ac4286c48f67f06cce1cb124b3
MD5 676a1762d8c26accd755892c6336e68c
BLAKE2b-256 437995668712ccad3a32ec8ca7e66e27f8d1b36c65ce755a9669f0444fd1c8c4

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 3f74f1c0abb9fb6da354c0c8fafec3a198fc47c5cedaab00be8127a38c03e2b6
MD5 234a3d7f28aece7e1401212e05262eee
BLAKE2b-256 dbd93790aa57cfa827e5f66ecf7291accceb5e601aa569a3331ec4a606b40945

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 045f3cdbed3d6827567256ed3c8759ea3a2cb2e2d50036905df39727cf411354
MD5 cb3bd4a95ca4c948a3d0b2681215a412
BLAKE2b-256 52ab7383869e41e788bbe6eafac33b0408e6d801e0c1d8a3dd9cc572277a4650

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3c5c9b6d7e2a3a845290afc7bc4d34e573aeda9978b5def2c09f66ba97618d28
MD5 a76df51c8550312f9e57222a8f4a1262
BLAKE2b-256 23b7191504b09d09e0a299b0cc33719c6471375c518733190b5db27854abccdd

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5dafa59b5bf735a5814cf99fd6b8532adde92aa46a3e295f170211e8096c78b8
MD5 c37cbb81c97c241faf534df4ac07bd9e
BLAKE2b-256 7d54178435687a0cc3f65fdb1974e58411f783bcab42ea737299375be5e2447f

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 eb4c05fafca2ca28847bc368d2bcb6d4cd45c9613e85f7f65dfca5bf5fab86a3
MD5 a4e4536a6125de62d3a24635cb948e89
BLAKE2b-256 a9fcb7b4299feb3fca3301b7a378dd20e210a82730cfecedcec83ebf65c708a7

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8c74630aaa871ae7c1bce47e44eb46b7053b1a2fccb8b7fc2b193db33bf19d1a
MD5 179e54bffa98cf6d9decae9987a5f748
BLAKE2b-256 161d592c63e553f97be40a96a9f8a449b9e129948713a1fc9ff92b6dfef005bd

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 612b10058d2dc85fb662cc67bf574f705f0374ab982487acc4176349290894d0
MD5 e4b3c173b3228d5b47d4a93e2d626061
BLAKE2b-256 97de9339a5a30ded8bbfcd6ff61e8c2017fafe2665c323d9e20d577690f80d0c

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 3ddc8bf7b8638f579676b77d6a00c3e3ae842418fb2d653d2dbc09e23055126b
MD5 c6191d0d9f4de77d8b7dd85f8aa0c8f1
BLAKE2b-256 24a299585aa7a995a55721ca55ef13f9e67fdac5a1c8057e3ba22a70a0a5c2d0

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: pyinstrument-4.2.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 98.2 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 ec175b77b3fd6bc5dbd3042ec1a3ef8d0c7db0ec5ee6993c50e583c7c7cd4af7
MD5 8c4c2e31aa6aa1370b37df49e46c1559
BLAKE2b-256 9733187ca03197f2c6e139177bfce4926894f58a74604dffa2b3cbb2de7bd67a

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c4b93d6ab09a0dd4cca9fb5a2682b5bcff280b7006fc9a9844eee0fadc048a8e
MD5 dca1fd361588c733a8214051238306b0
BLAKE2b-256 82f433a4030070c5080adc1c70c06d134596dc0441d42a950cbbf33f3b0b2ac6

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0a28ad9c298b8d4870f26b4169f20a220bf5848f44ed4bfaf7d980542f267573
MD5 845a1e2c9c78e5934dd989a706722a71
BLAKE2b-256 58c2f88dc35ca1d0428549ae521e826bd9fbf7caafceb967078401a3fac5e667

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 1effd235fe20c4a52bb2c20459d35f25ef01ec8e4feb984b51f06c498305a263
MD5 615436f5ccd22920e896cc0fa25fe65a
BLAKE2b-256 c39399dd59eef33339fa46f92131e4f087683f5b427c1fad4a2ac6427339f877

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 49557fde54d1e1bfed3b5043ca225cc759090784c02e17c8322f0cfd5e071b20
MD5 23d27c7450309890957f290b1ef14e4c
BLAKE2b-256 dd398029926234fea57b802adc70ccc441ab2d2598511b1178bbc7e2ebf15631

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 062c7727aea1428ea4becab90d7aa49f8489cc29da57abaa09edef9bcfb8aafb
MD5 6c83758349cab58ac629977d25d8871c
BLAKE2b-256 8666778829462ab2b4dd06e03c5ae06b1b62fcd1003ecd80fdbe412500581370

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ac49e509b5f71e600c0722aa7cc6eeaadd1070631915c19b1b036b15530d666c
MD5 1c29e63f4545434949c2a5c3021c3c3a
BLAKE2b-256 ab283e0bfa48cf366c2f1da5ca734306ca0cfefd42f3ff2474ab33dc47994eff

See more details on using hashes here.

File details

Details for the file pyinstrument-4.2.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyinstrument-4.2.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ac4f6eb860476ec8974ba3af5f1973e0c9769b4d5cd89180c89c2c66f5e26a9b
MD5 1628e600c5303accd565e26e289d46fa
BLAKE2b-256 dec239a7af9a28a9401be646e8d71658ada95ce4167a7f01f63d4dd662775ff0

See more details on using hashes here.

Supported by

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