Python memory_profiler introduction














































Python memory_profiler introduction



 Memory Profiler



 This is a python module for monitoring memory consumption of a process as well as  line-by-line analysis ofmemory

 consumption for python programs. It is a pure python  module which depends on the psutil module.

  Installation

  Install via pip:

  $ pip install -U memory_profiler

  line-by-line memory usage

 The line-by-line memory usage mode is used much in the same way of the line_profiler:: first decorate the function       you would like to profile with @profile and then run the script with a special script (in this case with specific   arguments to the Python interpreter).


 In the following example, we create a simple function my_func that allocates lists ab and then deletes b:

@profile
def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a
if __name__ == '__main__':
    my_func()


  Execute the code passing the option -m memory_profiler to the python interpreter to load the memory_profiler
  module and print to stdout the line-by-line analysis. If the file name was example.py, this would result in:


$ python -m memory_profiler example.py


   Output:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a


 The first column represents the line number of the code that has been profiled, the second column (Mem usage) the memory usage of the Python interpreter after that line has been executed. The third column (Increment) represents the difference in memory of the current line with respect to the last one. The last column (Line Contents) prints the code that has been profiled.

  Decorator

  A function decorator is also available. Use as follows:

from memory_profiler import profile
@profile
def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a


  In this case the script can be run without specifying -m memory_profiler in the command line and In function decorator, you can specify the precision as an argument to the decorator function . If a python script with decorator @profile is called using -m memory_profiler in the command line, the precision parameter is ignored.


Comments