Tengo un programa en Python que muere con un MemoryError cuando doy de comer a un archivo de gran tamaño. Hay herramientas que podría utilizar para averiguar qué es lo que el uso de la memoria?

Este programa funcionó bien en pequeños archivos de entrada. El programa, obviamente, necesita algunas mejoras de escalabilidad; sólo estoy tratando de averiguar dónde. «Punto de referencia antes de optimizar», como una persona sabia dijo una vez.

(Sólo para prevenir la inevitable «agregar más RAM» respuesta: Este se ejecuta en una versión de 32 bits de WinXP caja con 4 gb de RAM, así que Python tiene acceso a 2 gb de memoria utilizable. La adición de más memoria no es técnicamente posible. Reinstalar mi PC con Windows de 64 bits no es práctico.)

EDIT: Vaya, esto es un duplicado de Que Python memoria del analizador se recomienda?

Por lo tanto, es sólo a mí o a hacer todas estas herramientas sólo se mostrará el número de objetos, me encantaría saber DONDE estas todos.

OriginalEl autor user9876 | 2009-11-05

4 Comentarios

  1. 3

    El más simple y ligero de manera que probablemente sería el uso de la construido en memoria de las capacidades de consulta de Python, como sys.getsizeof – sólo se ejecuta en los objetos para una reducción de su problema (es decir, un archivo más pequeño) y ver lo que toma una gran cantidad de memoria.

    Buena y rápida solución. Algunas limitaciones, sin embargo, ya que usted necesita saber que objeto es (o tener una conjetura). También, hacer esto en una lista con 100 objetos de 100 MB cada uno va a devolver el tamaño de 100 punteros (de modo que sólo unos pocos KB)…

    OriginalEl autor Eli Bendersky

  2. 2

    En su caso, la respuesta es, probablemente, muy simple: no leer todo el archivo de una vez pero el proceso el archivo pedazo a pedazo. Que puede ser muy fácil o complicado dependiendo del escenario de uso. Por ejemplo, una suma de comprobación MD5 de cálculo se puede hacer de manera mucho más eficiente para archivos de gran tamaño sin necesidad de leer todo el archivo. El último cambio se ha reducido drásticamente el consumo de memoria en algunos SCons escenarios de uso, pero era casi imposible rastrear con una memoria del analizador.

    Si usted todavía necesita una memoria del analizador: eliben ya se ha sugerido sys.getsizeof. Si que no se corte, intente Heapy o Pympler.

    OriginalEl autor Pankrat

  3. 1

    Usted pidió una herramienta de recomendación:

    Python Memoria Validador le permite supervisar el uso de memoria, la asignación de lugares, GC colecciones, las instancias de objeto, la memoria de las instantáneas, etc de su aplicación Python. Sólo en Windows.

    http://www.softwareverify.com/python/memory/index.html

    Descargo de responsabilidad: yo estaba involucrado en la creación de este software.

    ¿Por qué sólo en Windows? Usted debe darse cuenta de que una pequeña minoría de los desarrolladores de Python.

    OriginalEl autor Stephen Kellett

Dejar respuesta

Please enter your comment!
Please enter your name here