Je veux connaître l'utilisation de la mémoire de mon application Python et je veux en particulier savoir quels blocs / portions de code ou objets consomment le plus de mémoire. La recherche Google montre qu'un commercial est le validateur de mémoire Python (Windows uniquement).
Et ceux open source sont PySizer et Heapy .
Je n'ai essayé personne, donc je voulais savoir lequel est le meilleur compte tenu:
Donne la plupart des détails.
Je dois apporter le moins ou pas de modifications à mon code.
python
performance
memory-management
profiling
Anurag Uniyal
la source
la source
Réponses:
Heapy est assez simple à utiliser. À un moment donné de votre code, vous devez écrire ce qui suit:
Cela vous donne une sortie comme celle-ci:
Vous pouvez également savoir d'où les objets sont référencés et obtenir des statistiques à ce sujet, mais d'une manière ou d'une autre, les documents à ce sujet sont un peu rares.
Il existe également un navigateur graphique, écrit en Tk.
la source
pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy
boost::python
objets, ce serait bien de voir quelques exemples!Puisque personne ne l'a mentionné, je pointerai vers mon module memory_profiler qui est capable d'imprimer un rapport ligne par ligne de l'utilisation de la mémoire et fonctionne sous Unix et Windows (nécessite psutil sur ce dernier). La sortie n'est pas très détaillée mais le but est de vous donner un aperçu de l'endroit où le code consomme plus de mémoire et non une analyse exhaustive des objets alloués.
Après avoir décoré votre fonction avec
@profile
et exécuté votre code avec le-m memory_profiler
drapeau, il imprimera un rapport ligne par ligne comme ceci:la source
memory_profiler
sa sortie? Je fais peut-être quelque chose de mal, mais il semble qu'au lieu de vider le profil d'une fonction une fois terminée, il attend la fin du script.Je recommande Dowser . Il est très facile à configurer et vous n'avez besoin d'aucune modification de votre code. Vous pouvez afficher le nombre d'objets de chaque type dans le temps, afficher la liste des objets en direct, afficher les références aux objets en direct, le tout à partir de l'interface Web simple.
Vous importez memdebug et appelez memdebug.start. C'est tout.
Je n'ai pas essayé PySizer ou Heapy. J'apprécierais les critiques des autres.
MISE À JOUR
Le code ci-dessus est pour
CherryPy 2.X
,CherryPy 3.X
laserver.quickstart
méthode a été supprimée etengine.start
ne prend pas leblocking
drapeau. Donc, si vous utilisezCherryPy 3.X
la source
Considérez la bibliothèque objgraph (voirhttp://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks pour un exemple d'utilisation).
la source
objgraph.by_type('dict')
comprendre d'oùdict
viennent tous ces objets inattendus .Muppy est (encore un autre) Profiler d'utilisation de la mémoire pour Python. Cet ensemble d'outils se concentre sur l'identification des fuites de mémoire.
Muppy essaie d'aider les développeurs à identifier les fuites de mémoire des applications Python. Il permet de suivre l'utilisation de la mémoire pendant l'exécution et d'identifier les objets qui fuient. De plus, des outils sont fournis qui permettent de localiser la source des objets non libérés.
la source
Je développe un profileur de mémoire pour Python appelé memprof:
http://jmdana.github.io/memprof/
Il vous permet de consigner et de tracer l'utilisation de la mémoire de vos variables lors de l'exécution des méthodes décorées. Il vous suffit d'importer la bibliothèque en utilisant:
Et décorez votre méthode en utilisant:
Voici un exemple sur l'apparence des tracés:
Le projet est hébergé dans GitHub:
https://github.com/jmdana/memprof
la source
a
,b
etc
sont les noms des variables. Vous pouvez trouver la documentation sur github.com/jmdana/memprof . Si vous avez des questions, n'hésitez pas à soumettre un problème dans github ou à envoyer un e-mail à la liste de diffusion qui se trouve dans la documentation.J'ai trouvé que meliae était beaucoup plus fonctionnel que Heapy ou PySizer. S'il vous arrive d'exécuter une webapp wsgi, alors Dozer est un joli wrapper middleware de Dowser
la source
Essayez également le projet pytracemalloc qui fournit l'utilisation de la mémoire par numéro de ligne Python.
EDIT (2014/04): Il dispose désormais d'une interface graphique Qt pour analyser les instantanés.
la source
tracemalloc
fait maintenant partie de la bibliothèque standard de python. Voir docs.python.org/3/library/tracemalloc.html