Comment profiler l'utilisation de la mémoire Python | Vue plurielle (2023)

Une des manièresPythonrend le développement rapide (sans parler de plus facile que des langages commeCetC++) est la gestion de la mémoire Python. En Python, c’est simple car le langage gère la gestion de la mémoire pour vous. Toutefois, cela ne signifie pas qu’il faille oublier la mémoire. Les bons développeurs voudront suivre l’utilisation de la mémoire de leur application et chercher à réduire l’utilisation de la mémoire. Jetez un œil aux outils courants pour ce faire.

Outils pour la gestion de la mémoire Python

En plus des outils contenus dansPython de base, il existe une variété de packages disponibles pour la gestion de la mémoire. Explorons quelques-uns des plus utiles.

Outils de base pour le profilage de la mémoire Python

La couche la plus basse du profilage de la mémoire consiste à examiner un seul objet en mémoire. Vous pouvez le faire en ouvrant un shell et en faisant quelque chose comme ce qui suit :

>>> importer sys>>> sys.getsizeof({})136>>> sys.getsizeof([])32>>> sys.getsizeof(set())112

L'extrait ci-dessus illustre la surcharge associée à unlisteobjet. Une liste fait 32 octets (sur une machine 32 bits exécutant Python 2.7.3). Ce style de profilage est utile pour déterminer quel type deType de donnéesutiliser.

Travailler avec le profileur de mémoire Python

Le moyen le plus simple de profiler une seule méthode ou fonction est l'open sourceprofileur de mémoireemballer. C'est semblable àprofil_ligne, si vous connaissez ce package.

Vous pouvez l'utiliser en mettant le@profil décorateurautour de n'importe quelle fonction ou méthode et en cours d'exécutionpython -m profile_mémoire monscript. Vous verrez l'utilisation de la mémoire ligne par ligne une fois votre script terminé.

Ceci est extrêmement utile si vous souhaitez profiler une section de code gourmande en mémoire, mais cela ne vous aidera pas beaucoup si vous n'avez aucune idée de l'endroit où se situe la plus grande utilisation de la mémoire. Dans ce cas, une approche de profilage de niveau supérieur est nécessaire en premier lieu.

Essayez Guppy pour profiler une application entière en Python

Si vous devez profiler une application Python entière,guppypeut aider à simplifier ce processus et à le limiter aux éléments que vous souhaitez afficher.

Utiliserguppyvous déposez quelque chose comme ce qui suit dans votre code :

depuis guppy import hpyh = hpy()print h.heap()

Cela imprimera un joli tableau d'utilisation regroupé par type d'objet. Voici un exemple dePyQt4application sur laquelle j'ai travaillé :

Partition d'un ensemble de 235760 objets. Taille totale = 19909080 octets. Nombre d'index % Taille % Cumulatif % Genre (classe / dict de classe)0 97264 41 8370996 42 8370996 42 str1 47430 20 1916788 10 10287784 52 tuple2 937 0 1106440 6 11394224 57 dict de PyQt 4.QtCore.pyqtWrapperType3 646 0 1033648 5 12427872 62 dict de module4 11683 5 841176 4 13269048 67 types.CodeType5 11684 5 654304 3 13923352 70 fonction6 1200 1 583872 3 14507224 73 dict de type7 782 0 566768 3 15073 992 76 dict (pas de propriétaire)8 1201 1 536512 3 15610504 78 type9 1019 0 499124 3 16109628 81 unicode

Ce type de profilage peut s'avérer difficile si vous disposez d'une application volumineuse utilisant un nombre relativement restreint de types d'objets.

Essayez le profileur Python mprof pour l'utilisation de la mémoire

mprof peut vous montrer l'utilisation de la mémoire pendant toute la durée de vie de votre application. Cela peut être utile si vous souhaitez voir si votre mémoire est nettoyée et libérée périodiquement.

Mieux encore, utiliser mprof est simple ; exécutez simplement mprof run script script_args dans le shell de votre choix. mprof créera automatiquement un graphique de l'utilisation de la mémoire de votre script au fil du temps, que vous pourrez visualiser en exécutant mprof plot. Il est important de noter ici que le traçage nécessite matplotlib. Ceci est utile pour déterminer l’utilisation de la mémoire du profil Python.

Profilage de l'utilisation de la mémoire pour résoudre les fuites

Si vous êtes confronté à des fuites de mémoire dans Python, le moyen le plus simple de les gérer est d'augmenter l'allocation de mémoire. Bien qu’il s’agisse d’une solution rapide, elle risque de créer un produit instable.

Une meilleure solution consiste à profiler l'utilisation de la mémoire de l'application pour mieux comprendre le code et les packages utilisés. Une fois que vous êtes en mesure de profiler la mémoire et de comprendre où se produisent les fuites, vous pouvez mieux gérer les vidages de mémoire.

Pour tenter de réparer et d'éviter les fuites de mémoire, envisagez d'exécuter des tâches gourmandes en mémoire dans des processus distincts. Cela réduira le nombre de fuites de mémoire et garantira que la mémoire n'est libérée qu'après l'exécution du code.

Luc Lee

Luke Lee vit à Dresde, en Allemagne et écrit également surwww.lukelee.me.

References

Top Articles
Latest Posts
Article information

Author: Neely Ledner

Last Updated: 12/10/2023

Views: 6484

Rating: 4.1 / 5 (42 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Neely Ledner

Birthday: 1998-06-09

Address: 443 Barrows Terrace, New Jodyberg, CO 57462-5329

Phone: +2433516856029

Job: Central Legal Facilitator

Hobby: Backpacking, Jogging, Magic, Driving, Macrame, Embroidery, Foraging

Introduction: My name is Neely Ledner, I am a bright, determined, beautiful, adventurous, adventurous, spotless, calm person who loves writing and wants to share my knowledge and understanding with you.