Skip to main content

A memory profiler for Python applications

Project description


OS Linux OS MacOS PyPI - Python Version PyPI - Implementation PyPI PyPI - Downloads Tests Code Style

Memray output

Memray is a memory profiler for Python. It can track memory allocations in Python code, in native extension modules, and in the Python interpreter itself. It can generate several different types of reports to help you analyze the captured memory usage data. While commonly used as a CLI tool, it can also be used as a library to perform more fine-grained profiling tasks.

Notable features:

  • 🕵️‍♀️ Traces every function call so it can accurately represent the call stack, unlike sampling profilers.
  • ℭ Also handles native calls in C/C++ libraries so the entire call stack is present in the results.
  • 🏎 Blazing fast! Profiling slows the application only slightly. Tracking native code is somewhat slower, but this can be enabled or disabled on demand.
  • 📈 It can generate various reports about the collected memory usage data, like flame graphs.
  • 🧵 Works with Python threads.
  • 👽🧵 Works with native-threads (e.g. C++ threads in C extensions).

Memray can help with the following problems:

  • Analyze allocations in applications to help discover the cause of high memory usage.
  • Find memory leaks.
  • Find hotspots in code that cause a lot of allocations.

Note Memray only works on Linux and MacOS, and cannot be installed on other platforms.

Installation

Memray requires Python 3.7+ and can be easily installed using most common Python packaging tools. We recommend installing the latest stable release from PyPI with pip:

    python3 -m pip install memray

Notice that Memray contains a C extension so releases are distributed as binary wheels as well as the source code. If a binary wheel is not available for your system (Linux x86/x64 or macOS), you'll need to ensure that all the dependencies are satisfied on the system where you are doing the installation.

Building from source

If you wish to build Memray from source you need the following binary dependencies in your system:

  • libunwind (for Linux)
  • liblz4

Check your package manager on how to install these dependencies (for example apt-get install libunwind-dev liblz4-dev in Debian-based systems or brew install lz4 in MacOS). Note that you may need to teach the compiler where to find the header and library files of the dependencies. For example, in MacOS with brew you may need to run:

export CFLAGS="-I$(brew --prefix lz4)/include" LDFLAGS="-L$(brew --prefix lz4)/lib -Wl,-rpath,$(brew --prefix lz4)/lib"

before installing memray. Check the documentation of your package manager to know the location of the header and library files for more detailed information.

Once you have the binary dependencies installed, you can clone the repository and follow with the normal building process:

git clone git@github.com:bloomberg/memray.git memray
cd memray
python3 -m venv ../memray-env/  # just an example, put this wherever you want
source ../memray-env/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -e . -r requirements-test.txt -r requirements-extra.txt

This will install Memray in the virtual environment in development mode (the -e of the last pip install command).

Documentation

You can find the latest documentation available here.

Usage

There are many ways to use Memray. The easiest way is to use it as a command line tool to run your script, application, or library.

usage: memray [-h] [-v] {run,flamegraph,table,live,tree,parse,summary,stats} ...

Memory profiler for Python applications

Run `memray run` to generate a memory profile report, then use a reporter command
such as `memray flamegraph` or `memray table` to convert the results into HTML.

Example:

    $ python3 -m memray run -o output.bin my_script.py
    $ python3 -m memray flamegraph output.bin

positional arguments:
  {run,flamegraph,table,live,tree,parse,summary,stats}
                        Mode of operation
    run                 Run the specified application and track memory usage
    flamegraph          Generate an HTML flame graph for peak memory usage
    table               Generate an HTML table with all records in the peak memory usage
    live                Remotely monitor allocations in a text-based interface
    tree                Generate a tree view in the terminal for peak memory usage
    parse               Debug a results file by parsing and printing each record in it
    summary             Generate a terminal-based summary report of the functions that allocate most memory
    stats               Generate high level stats of the memory usage in the terminal

optional arguments:
  -h, --help            Show this help message and exit
  -v, --verbose         Increase verbosity. Option is additive and can be specified up to 3 times

Please submit feedback, ideas, and bug reports by filing a new issue at https://github.com/bloomberg/memray/issues

To use Memray over a script or a single python file you can use

python3 -m memray run my_script.py

If you normally run your application with python3 -m my_module, you can use the -m flag with memray run:

python3 -m memray run -m my_module

You can also invoke Memray as a command line tool without having to use -m to invoke it as a module:

memray run my_script.py
memray run -m my_module

The output will be a binary file (like memray-my_script.2369.bin) that you can analyze in different ways. One way is to use the memray flamegraph command to generate a flame graph:

memray flamegraph my_script.2369.bin

This will produce an HTML file with a flame graph of the memory usage that you can inspect with your favorite browser. There are multiple other reporters that you can use to generate other types of reports, some of them generating terminal-based output and some of them generating HTML files. Here is an example of a Memray flamegraph:

Pytest plugin

If you want an easy and convenient way to use memray in your test suite, you can consider using pytest-memray. Once installed, this pytest plugin allows you to simply add --memray to the command line invocation:

pytest --memray tests/

And will automatically get a report like this:

python3 -m pytest tests --memray
=============================================================================================================================== test session starts ================================================================================================================================
platform linux -- Python 3.8.10, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /mypackage, configfile: pytest.ini
plugins: cov-2.12.0, memray-0.1.0
collected 21 items

tests/test_package.py .....................                                                                                                                                                                                                                      [100%]


================================================================================================================================= MEMRAY REPORT ==================================================================================================================================
Allocations results for tests/test_package.py::some_test_that_allocates

	 📦 Total memory allocated: 24.4MiB
	 📏 Total allocations: 33929
	 📊 Histogram of allocation sizes: |▂   █    |
	 🥇 Biggest allocating functions:
		- parse:/opt/bb/lib/python3.8/ast.py:47 -> 3.0MiB
		- parse:/opt/bb/lib/python3.8/ast.py:47 -> 2.3MiB
		- _visit:/opt/bb/lib/python3.8/site-packages/astroid/transforms.py:62 -> 576.0KiB
		- parse:/opt/bb/lib/python3.8/ast.py:47 -> 517.6KiB
		- __init__:/opt/bb/lib/python3.8/site-packages/astroid/node_classes.py:1353 -> 512.0KiB

You can also use some of the included markers to make tests fail if the execution of said test allocates more memory than allowed:

@pytest.mark.limit_memory("24 MB")
def test_foobar():
    # do some stuff that allocates memory

To learn more on how the plugin can be used and configured check out the plugin documentation.

Native mode

Memray supports tracking native C/C++ functions as well as Python functions. This can be especially useful when profiling applications that have C extensions (such as numpy or pandas) as this gives a holistic vision of how much memory is allocated by the extension and how much is allocated by Python itself.

To activate native tracking, you need to provide the --native argument when using the run subcommand:

memray run --native my_script.py

This will automatically add native information to the result file and it will be automatically used by any reporter (such the flamegraph or table reporters). This means that instead of seeing this in the flamegraphs:

You will now be able to see what's happening inside the Python calls:

Reporters display native frames in a different color than Python frames. They can also be distinguished by looking at the file location in a frame (Python frames will generally be generated from files with a .py extension while native frames will be generated from files with extensions like .c, .cpp or .h).

Live mode

Memray output

Memray's live mode runs a script or a module in a terminal-based interface that allows you to interactively inspect its memory usage while it runs. This is useful for debugging scripts or modules that take a long time to run or that exhibit multiple complex memory patterns. You can use the --live option to run the script or module in live mode:

    memray run --live my_script.py

or if you want to execute a module:

    memray run --live -m my_module

This will show the following TUI interface in your terminal:

Sorting results

The results are displayed in descending order of total memory allocated by a function and the subfunctions called by it. You can change the ordering with the following keyboard shortcuts:

  • t (default): Sort by total memory

  • o: Sort by own memory

  • a: Sort by allocation count

The sorted column is highlighted with < > characters around the title.

Viewing different threads

By default, the live command will present the main thread of the program. You can look at different threads of the program by pressing the left and right arrow keys.

API

In addition to tracking Python processes from a CLI using memray run, it is also possible to programmatically enable tracking within a running Python program.

import memray

with memray.Tracker("output_file.bin"):
    print("Allocations will be tracked until the with block ends")

For details, see the API documentation.

License

Memray is Apache-2.0 licensed, as found in the LICENSE file.

Code of Conduct

This project has adopted a Code of Conduct. If you have any concerns about the Code, or behavior that you have experienced in the project, please contact us at opensource@bloomberg.net.

Security Policy

If you believe you have identified a security vulnerability in this project, please send an email to the project team at opensource@bloomberg.net, detailing the suspected issue and any methods you've found to reproduce it.

Please do NOT open an issue in the GitHub repository, as we'd prefer to keep vulnerability reports private until we've had an opportunity to review and address them.

Contributing

We welcome your contributions to help us improve and extend this project!

Below you will find some basic steps required to be able to contribute to the project. If you have any questions about this process or any other aspect of contributing to a Bloomberg open source project, feel free to send an email to opensource@bloomberg.net and we'll get your questions answered as quickly as we can.

Contribution Licensing

Since this project is distributed under the terms of an open source license, contributions that you make are licensed under the same terms. In order for us to be able to accept your contributions, we will need explicit confirmation from you that you are able and willing to provide them under these terms, and the mechanism we use to do this is called a Developer's Certificate of Origin (DCO). This is very similar to the process used by the Linux(R) kernel, Samba, and many other major open source projects.

To participate under these terms, all that you must do is include a line like the following as the last line of the commit message for each commit in your contribution:

Signed-Off-By: Random J. Developer <random@developer.example.org>

The simplest way to accomplish this is to add -s or --signoff to your git commit command.

You must use your real name (sorry, no pseudonyms, and no anonymous contributions).

Steps

  • Create an Issue, select 'Feature Request', and explain the proposed change.
  • Follow the guidelines in the issue template presented to you.
  • Submit the Issue.
  • Submit a Pull Request and link it to the Issue by including "#" in the Pull Request summary.

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

memray-1.3.0.tar.gz (948.4 kB view details)

Uploaded Source

Built Distributions

memray-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

memray-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (3.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

memray-1.3.0-cp311-cp311-macosx_10_14_x86_64.whl (574.2 kB view details)

Uploaded CPython 3.11 macOS 10.14+ x86-64

memray-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64

memray-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (2.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

memray-1.3.0-cp310-cp310-macosx_10_14_x86_64.whl (578.7 kB view details)

Uploaded CPython 3.10 macOS 10.14+ x86-64

memray-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

memray-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (2.8 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

memray-1.3.0-cp39-cp39-macosx_10_14_x86_64.whl (579.8 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

memray-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

memray-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (2.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

memray-1.3.0-cp38-cp38-macosx_10_14_x86_64.whl (592.3 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

memray-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

memray-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (2.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

memray-1.3.0-2-cp311-cp311-macosx_11_0_arm64.whl (546.6 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

memray-1.3.0-2-cp310-cp310-macosx_11_0_arm64.whl (556.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

memray-1.3.0-2-cp39-cp39-macosx_11_0_arm64.whl (551.8 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

memray-1.3.0-2-cp38-cp38-macosx_11_0_arm64.whl (564.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

File details

Details for the file memray-1.3.0.tar.gz.

File metadata

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

File hashes

Hashes for memray-1.3.0.tar.gz
Algorithm Hash digest
SHA256 92a94234c3bde9cefe89766b31c3e5df3331bd3cf781de6957caf7de62e7e200
MD5 ebc6c0583005eb2621c45843bd7051b1
BLAKE2b-256 fcacef15eb5a4d8475461af1bb203f28354ef5c49ac97b2dd7b04a08b0d6a788

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ef3095f468afc22df74e8df7f942839267d5ed428ab0268abfac3f4d599126b1
MD5 f2b2f0bf7e6252553e569661b6fe18df
BLAKE2b-256 5b27225f87db5cbbdac9ae337bd0ce331e03636262932453576bb9f0934602a2

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 cc91095150021be3c6e251ed9ff558fab6540693838282e7ee4581ee66888099
MD5 5f8ab4b053ca1c01a0bb96ec35be128b
BLAKE2b-256 8f64b33b1776132716887ae23a74015d93a4e7441261c428a5d483e348e94966

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 1495e79aba18efacf225763dd7e12a4a07ca470e4145543f0eb1cf8c8889a3ee
MD5 5fb9781d6e5cd72d581acb44b04e6e01
BLAKE2b-256 5241f9c9bac3a7461f03c2edae64114cfae3837685767f58867c501a45bbc34c

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 d980985a3e499df67e0b5a6ad2bb282f6999e767710dab5cd6b786e184e347cf
MD5 31d48f10e346b499997f0a148504b3bf
BLAKE2b-256 38e95ec495024e4f7180c895ca9f37029b601c5a8af5d95d7200bcbb6df27c0b

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f756d2ed0cf4597cef4685f36af9e7efb843b453c3bd9adc53c8801664cbb0a6
MD5 2bcf2bf2cad05e171f411ce6f920f36f
BLAKE2b-256 8bcb1b08260ea46cf9fc1115a69f7dc7669ae615ce3ee1edf08c9cbc7f993ac7

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 0708afa133a790a845a79bbffe30b78b159af177cc6f177a680ace9646501f21
MD5 cd2a6c4072d710c8666efbeb32d53c40
BLAKE2b-256 bfbaafb69891056cbc124ad07235157ef893dffb42f0ce751315c2a08b4bbf25

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b973035993197d1553420374724c2edc1dc78f1aaacef394b18ab5f29a176503
MD5 0476464d9d84c9e1211684928cd63f69
BLAKE2b-256 45126e8eb241066587b9d09c883113c6e51fd0238a67020e6cc5443db1034235

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 610ecff6b83e6193bb58e798bd8673e14e2288f44b2d3d3e4f0d094dac1a4d38
MD5 d6b230de95eb6fb0509cd645f8e78bdc
BLAKE2b-256 622ab0d8162d54fa927d19f26acfd5da917ab41d62aac03f05c80502d7cff64f

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 b73fffbf17a1dac87b9fc79fe0da89d910fb94aa8a8e0ef0b3aa5ce3efd9b08e
MD5 0e134930ea319b2da9ddd671b42c743d
BLAKE2b-256 468fae9a1bc7cbb68d1e2529042851f6a03354d1a7ac4545a79bd2cf65dee6ea

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 21e90f7412d00490175a02636c67c60b91e3c3f34a019b52cb2e1efe0c3caf3d
MD5 c83943c7de03de462906d4b3a63410bb
BLAKE2b-256 196436f58c96e49b9604939c2ca27ffc5df21c922d42325fac71d603ec6a4b12

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 d637e14ea1ed3c9c5f18028cb9594d1f4c4e4c2054d125ec9ada3fcbd6379e15
MD5 8ac4b5807e8b96cc80d0ce38fec70c4f
BLAKE2b-256 fc403152c595447e53b3dac08e8aa3710f858ddc6db2e410b0103d06e87bb5a4

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 5468a68c8ac1cfabeacd7d278e4cc3fb522f4643ecf0f693024993105f88e4eb
MD5 dc5af8b9a790413cce46f3f133087aa3
BLAKE2b-256 c097a0c8c1489f81797f3557d29a28947bc22a0c4a790efabdde8273cbc9ba59

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5ae940a47dab8ed85a80bac7d7d5ff038178c26274472411f814f810f9c39b09
MD5 0e176eb5fcc0ba3a14f4cda52a3f9311
BLAKE2b-256 1de5ba7c26d341c948881dfab3d500c067b27157d5f3a29f20df14bef778755a

See more details on using hashes here.

File details

Details for the file memray-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for memray-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 aea8c024d8aa1b06f7b3749c93eb8c106d23330ac7f96f0e06737d4c729305d8
MD5 de31e011f686cd9ff4765724ee23d308
BLAKE2b-256 b683ab4aab677c85b9dcd714d2c24486778c2b7f39a19707b98b658db5d12567

See more details on using hashes here.

File details

Details for the file memray-1.3.0-2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 488a90cec2f2f6c9cb0e0fcce4c2eb11ebaf1517a77c5cf1ba4e8302126f94dc
MD5 566310c23d7d2421c05bbbe56e6203ec
BLAKE2b-256 947edebf041f3080decc6343b508147e52a195b99753ec0537927fb2c1ff29f1

See more details on using hashes here.

File details

Details for the file memray-1.3.0-2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f4dd8a58a6b1eeb5fcfa54d728a75f58a189ad9c3d8412cfcbd694fadfe5f0e
MD5 8d4016cc6be54e97c923d609649e6d65
BLAKE2b-256 c8d1b882677c48e8ecdaa6f18eb4aab6f67bd2f19b28cda06faf6e71f8cd4366

See more details on using hashes here.

File details

Details for the file memray-1.3.0-2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d5c81fa76c8e79e407df0abccdce8ad6c30a996cdebf1e0935144b7fd4b1e039
MD5 e2665e77fc2e50cd88457851414bb85e
BLAKE2b-256 7da5c3e1a7db28bffc8cb4a02884e641c79afd9f865d97799ebcf873a9e4b553

See more details on using hashes here.

File details

Details for the file memray-1.3.0-2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memray-1.3.0-2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c3b81f2b047abce5aedea3e1b1fbbe1b6eb76bf5af58ce74b497cf71f9cff14
MD5 d4ff00977de292eec3763d24a92ade69
BLAKE2b-256 caa10c7314495efa9e23c01f1d7d6f148a56df21637a072ef7d5bc70ffe80f82

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