[Python-Dev] RFC: PEP 454: Add a new tracemalloc module (original) (raw)

Victor Stinner victor.stinner at gmail.com
Sun Sep 8 16:03:43 CEST 2013


2013/9/4 Victor Stinner <victor.stinner at gmail.com>:

http://www.python.org/dev/peps/pep-0454/

PEP: 454 Title: Add a new tracemalloc module to trace Python memory allocations Version: RevisionRevisionRevision Last-Modified: DateDateDate Author: Victor Stinner <victor.stinner at gmail.com> Status: Draft Type: Standards Track Content-Type: text/x-rst Created: 3-September-2013 Python-Version: 3.4

I added a function get_tracemalloc_size() to see how much memory is used by the tracemalloc module itself. Result on the Python test suite:

On a small application and a computer with GB of memory, it may not matter. In a big application on an embedded device, it can be a blocker point to use tracemalloc. So I added filters (on the filename and line number) directly in the C module:

add_filter(include: bool, filename: str, lineno: int=None) function:

Add a filter. If *include* is ``True``, only trace memory blocks
allocated in a file with a name matching *filename*. If
*include* is ``False``, don't trace memory blocks allocated in a
file with a name matching *filename*.

The match is done using *filename* as a prefix. For example,
``'/usr/bin/'`` only matchs files the ``/usr/bin`` directories. The
``.pyc`` and ``.pyo`` suffixes are automatically replaced with
``.py`` when matching the filename.

*lineno* is a line number. If *lineno* is ``None`` or lesser than
``1``, it matches any line number.

clear_filters() function:

Reset the filter list.

get_filters() function:

Get the filters as list of
``(include: bool, filename: str, lineno: int)`` tuples.

If *lineno* is ``None``, a filter matchs any line number.

By default, the filename of the Python tracemalloc module (tracemalloc.py) is excluded.

Right now, the match is done using a PyUnicode_Tailmatch(). It is not convinient. I will see if it is possible to implement the joker character "*" matching any string, so the API would be closer to Snapshot.filter_filenames() (which uses fnmatch.fnmatch).

Victor



More information about the Python-Dev mailing list