29 votes

Profileur de mémoire ligne par ligne Python?

Je suis à la recherche pour générer, à partir d'une grande base de code Python, un résumé de l'utilisation du tas ou les allocations de mémoire dans le cadre d'une fonction d'exécution.

Je suis familier avec heapy, et ça m'a bien servi pour prendre des "instantanés" des tas de points spécifiques dans mon code, mais j'ai trouvé qu'il est difficile de générer un "mémoire du temps" résumé avec elle. J'ai aussi joué avec line_profiler, mais qui fonctionne avec de l'exécution, pas de mémoire.

Mon secours est maintenant de Valgrind avec massif, mais qui n'a pas beaucoup de la mise en Python de l'information que les deux Heapy et line_profiler donner. Est-il une sorte de combinaison de ces deux derniers qui donnent un sens de l'utilisation de la mémoire ou d'un segment de croissance au cours de l'exécution de la durée d'un programme en Python?

13voto

gurney alex Points 4837

Je voudrais utiliser sys.settrace au démarrage du programme à enregistrer une coutume traceur de fonction. Le custom_trace_function sera appelée pour chaque ligne de code. Ensuite, vous pouvez utiliser cette fonction pour stocker des informations recueillies par heapy ou meliae dans un fichier pour un traitement ultérieur.

Voici un exemple très simple qui enregistre la sortie de hpy.tas() par seconde à un fichier de texte brut:

import sys
import time
import atexit
from guppy import hpy

_last_log_time = time.time()
_logfile = open('logfile.txt', 'w')

def heapy_profile(frame, event, arg):
    currtime = time.time()
    if currtime - _last_log_time < 1:
        return
    _last_log_time = currtime
    code = frame.f_code
    filename = code.co_filename
    lineno = code.co_firstlineno
    idset = hpy().heap()
    logfile.write('%s %s:%s\n%s\n\n' % (currtime, filename, lineno, idset))
    logfile.flush()

atexit.register(_logfile.close)
sys.settrace(heapy_profile)

5voto

user1121352 Points 1066

Vous pourriez être intéressé par memory_profiler .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X