También es posible usar la función getrusage()
desde el módulo de la biblioteca estándar resource
. El objeto resultante tiene el atributo ru_maxrss
, lo que da uso total de memoria para el proceso de llamada:
>>> import resource
>>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
2656
la Python docs no son claras en lo que las unidades son exactamente, pero el Mac OS X man page para getrusage(2)
describe las unidades como kilobytes.
La página man de Linux no está clara, pero parece ser equivalente a la información /proc/self/status
(es decir, kilobytes) que se describe en la respuesta aceptada. Por el mismo proceso que el anterior, que se ejecuta en Linux, la función que aparece en la respuesta aceptada da:
>>> memory_usage()
{'peak': 6392, 'rss': 2656}
esto puede no ser tan fácil de usar como la solución /proc/self/status
, pero es la biblioteca estándar, por lo que (siempre las unidades son estándar) debe ser multiplataforma y utilizable en sistemas que no tienen /proc/
(por ejemplo, Mac OS X y otros Unixes, tal vez Windows).
También, getrusage()
función puede también darse resource.RUSAGE_CHILDREN
para obtener el uso de procesos secundarios, y (en algunos sistemas) resource.RUSAGE_BOTH
para el total de (auto y el niño) el uso de proceso.
Esto cubrirá el caso memory_get_usage()
, pero no incluye el uso máximo. No estoy seguro si otras funciones del módulo resource
pueden dar un uso máximo.
es el pico/residente en kb o bytes? – Shabbyrobe
Buena pregunta: está en kilobytes, he agregado esa información a la respuesta original. –
Gracias a todos por la gran respuesta. Como un aparte, ¿tendría alguna idea de por qué el pico termina por encima de 80 mb (!!!) si engendro un montón de hilos, a pesar de que el residente se mantiene relativamente bajo? Además, ¿tiene alguna pista sobre cómo hacer esto en Win32? – Shabbyrobe