Que Python memoria del analizador se recomienda?[cerrado]
-
02-07-2019 - |
Pregunta
Quiero saber el uso de la memoria de mi Python aplicación y, específicamente, quiere saber lo que los bloques de código/partes u objetos que están consumiendo más memoria.De búsqueda de Google muestra con fines comerciales es Python Memoria Validador (Sólo en Windows).
Y de código abierto son PySizer y Heapy.
No he probado a nadie, así que quería saber cual es la mejor teniendo en cuenta:
Da más detalles.
Tengo que hacer menos o ningún cambio en mi código.
Solución
Heapy es muy sencillo de usar.En algún momento de su código, usted tiene que escribir lo siguiente:
from guppy import hpy
h = hpy()
print h.heap()
Esto te da una salida como esta:
Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 35144 27 2140412 26 2140412 26 str
1 38397 29 1309020 16 3449432 42 tuple
2 530 0 739856 9 4189288 50 dict (no owner)
Usted también puede averiguar desde donde se hace referencia a objetos y obtener estadísticas acerca de eso, pero de alguna manera los documentos en los que están un poco dispersos.
No es un navegador gráfico así, escrito en los conocimientos tradicionales.
Otros consejos
Ya que nadie ha mencionado es que me voy a apuntar a mi módulo memory_profiler que es capaz de imprimir línea-por-línea de informe de uso de memoria y funciona en Unix y Windows (necesidades psutil en esta última).La salida no es muy detallada, pero el objetivo es dar una visión general de donde el código está consumiendo más memoria y no un análisis exhaustivo sobre los objetos asignados.
Después de la decoración de su función con @profile
y el funcionamiento de su código con la -m memory_profiler
la bandera se imprimirá una línea por línea del informe como este:
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
Recomiendo Zahorí.Es muy fácil de configurar, y que necesita de cero cambios en el código.Usted puede ver los recuentos de objetos de cada tipo a través del tiempo, ver la lista de objetos activos, ver las referencias a los objetos, todo desde la interfaz web sencilla.
# memdebug.py
import cherrypy
import dowser
def start(port):
cherrypy.tree.mount(dowser.Root())
cherrypy.config.update({
'environment': 'embedded',
'server.socket_port': port
})
cherrypy.server.quickstart()
cherrypy.engine.start(blocking=False)
Importar memdebug, y llame a memdebug.inicio.Eso es todo.
No he probado PySizer o Heapy.Agradecería otros comentarios.
ACTUALIZACIÓN
El código de arriba es para CherryPy 2.X
, CherryPy 3.X
el server.quickstart
el método ha sido eliminado y engine.start
no tome la blocking
de la bandera.Así que si usted está utilizando CherryPy 3.X
# memdebug.py
import cherrypy
import dowser
def start(port):
cherrypy.tree.mount(dowser.Root())
cherrypy.config.update({
'environment': 'embedded',
'server.socket_port': port
})
cherrypy.engine.start()
Considere la posibilidad de la objgraph biblioteca (ver http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks para un ejemplo de caso de uso).
Muppy es (otro) el Uso de la Memoria del Analizador para Python.El enfoque de este conjunto de herramientas está puesto en la identificación de fugas de memoria.
Muppy intenta ayudar a los desarrolladores a la identidad pérdidas de memoria de aplicaciones Python.Permite el seguimiento de uso de memoria en tiempo de ejecución y la identificación de los objetos que se están escapando.Además, se proporcionan herramientas que permiten localizar la fuente de no se liberan los objetos.
Estoy desarrollando una memoria del analizador para Python llamado memprof:
http://jmdana.github.io/memprof/
Esto le permite registrar y graficar el uso de memoria de las variables durante la ejecución de la decoración de sus métodos.Sólo tienes que importar la librería utilizando:
from memprof import memprof
Y decorar su método de uso:
@memprof
Este es un ejemplo de cómo las parcelas aspecto:
El proyecto está alojado en GitHub:
Pruebe también el pytracemalloc proyecto que proporciona el uso de memoria por Python número de línea.
EDITAR (2014/04):Ahora tiene un Qt GUI para analizar las instantáneas.