Saltar al contenido

Cómo manejar la memoria en Python

Hay varias maneras de hacer un perfil de una aplicación Python completa. Puedes usar las herramientas estándar de unix top y ps. Una forma más específica de Python es guppy.

Guppy

Para usar Guppy, dejas caer algo como el siguiente en tu código:

Cómo manejar la memoria en Python
Cómo manejar la memoria en Python
123de guppy import hpy h = hpy()print h.heap()

pitón

Esto le imprimirá una bonita tabla de uso agrupada por tipo de objeto. Aquí hay un ejemplo de una aplicación PyQt4 en la que he estado trabajando:

123456789101112 Partición de un conjunto de 235760 objetos. Tamaño total = 19909080 bytes. Índice Recuento % Tamaño % Acumulativo % Tipo (clase / dic de clase) 0 97264 41 8370996 42 8370996 42 str 1 47430 20 1916788 10 10287784 52 tuple 2 937 0 1106440 6 11394224 57 dict de PyQt4.QtCore.pyqtWrapperTipo 3 646 0 1033648 5 12427872 62 dict de módulo 4 11683 5 841176 4 13269048 67 tipos. CódigoTipo 5 11684 5 654304 3 13923352 70 función 6 1200 1 583872 3 14507224 73 dict de tipo 7 782 0 566768 3 15073992 76 dict (sin propietario) 8 1201 1 536512 3 15610504 78 tipo 9 1019 0 499124 3 16109628 81 unicode

Este tipo de elaboración de perfiles puede ser difícil si se tiene una aplicación grande que utiliza un número relativamente pequeño de tipos de objetos.

mprof

Finalmente, recientemente descubrí que el perfilador de memoria viene con un script llamado mprof, que puede mostrarte el uso de la memoria durante la vida de tu aplicación. Esto puede ser útil si quieres ver si tu memoria se está limpiando y liberando periódicamente.

Usar mprof es fácil, sólo tienes que ejecutar mprof run script script_args en el shell que elijas. mprof creará automáticamente un gráfico del uso de la memoria de tu script a lo largo del tiempo, que podrás ver ejecutando mprof plot. Tenga en cuenta que el trazado requiere matplotlib.

Contenidos