J'avais besoin de vérifier les statistiques de mémoire des objets que j'utilise en python.
Je suis tombé sur guppy et pysizer, mais ils ne sont pas disponibles pour python2.7.
Existe-t-il un profileur de mémoire disponible pour python 2.7?
Si ce n'est pas le cas, je peux le faire moi-même?Existe-t-il un profileur de mémoire pour python2.7?
Répondre
Vous pouvez essayer d'adapter le code suivant votre situation spécifique et soutenir vos types de données:
import sys
def sizeof(variable):
def _sizeof(obj, memo):
address = id(obj)
if address in memo:
return 0
memo.add(address)
total = sys.getsizeof(obj)
if obj is None:
pass
elif isinstance(obj, (int, float, complex)):
pass
elif isinstance(obj, (list, tuple, range)):
if isinstance(obj, (list, tuple)):
total += sum(_sizeof(item, memo) for item in obj)
elif isinstance(obj, str):
pass
elif isinstance(obj, (bytes, bytearray, memoryview)):
if isinstance(obj, memoryview):
total += _sizeof(obj.obj, memo)
elif isinstance(obj, (set, frozenset)):
total += sum(_sizeof(item, memo) for item in obj)
elif isinstance(obj, dict):
total += sum(_sizeof(key, memo) + _sizeof(value, memo)
for key, value in obj.items())
elif hasattr(obj, '__slots__'):
for name in obj.__slots__:
total += _sizeof(getattr(obj, name, obj), memo)
elif hasattr(obj, '__dict__'):
total += _sizeof(obj.__dict__, memo)
else:
raise TypeError('could not get size of {!r}'.format(obj))
return total
return _sizeof(variable, set())
Cela semble prometteur, mais je pense que vous devriez le changer en 'def getsizeof (obj, memo = None):' et déplacer l'initialisation de 'memo' dans la fonction avec comme' si memo est None: memo = set() '. Bien sûr, tous les appels récursifs à 'getsizeof()' devraient alors avoir leurs arguments échangés aussi. – martineau
@martineau: Une promesse qui ne devrait pas être négligemment lancée sur le chemin d'un débutant. Gérer des instances de classes à travers toutes les complexités de l'ancien/nouveau, avec/sans '__slots__', l'héritage non/simple/multiple, etc. est un cauchemar. Voir par exemple http://code.activestate.com/recipes/546530-size-of-python-objects-revised/ qui a pris bien au-dessus de 2000 SLOC et de multiples versions pour l'obtenir à un non-connu-à-être-faux Etat. Je suis d'accord avec votre commentaire sur l'argument 'memo'. –
@John Machin: La recette activestate est maintenant plus proche de 3000 lignes de code source et est la version 5.12, donc le cas général est apparemment un œuf très dur à cracker - ce qui est une des raisons pour lesquelles j'ai trouvé la réponse de @Noctis Skytower n'a pas besoin d'un outil qui gère tous les cas imaginables, juste quelques-uns des leurs. Espérons que 'sys.getsizeof() 'va s'améliorer dans le futur - je n'en ai jamais vraiment eu besoin pour quoi que ce soit, je n'étais donc au courant que de l'avoir été ajouté, et pas de toutes ses lacunes. – martineau
Je ne connais aucun profileur pour Python 2.7 - mais vérifiez la fonction suivante qui a été ajoutée au module sys
, cela pourrait vous aider à le faire vous-même.
« Une nouvelle fonction,
getsizeof()
, prend une objet python et renvoie la quantité de mémoire utilisée par l'objet, mesurée en octets objets intégrés en retour résultats corrects;. Tiers extensions peuvent non, mais peut définir une méthode__sizeof__()
pour renvoyer la taille de l'objet. "
est ici des liens vers des endroits dans la documentation en ligne avec des informations à ce sujet:
What’s New in Python 2.6
27.1. sys module — System-specific parameters and functions
Il pourrait mais ce n'est pas le cas. 'sys.getsizeof' est" un piège et une illusion ". Lisez cette question SO, en particulier la réponse de Thomas Wouters: http://stackoverflow.com/questions/2117255 –
@John Machin: Dans ce cas, que pensez-vous de la réponse de @Noctis Skytower? – martineau
est ici celui qui fonctionne pour Python 2.7: The Pympler package.
- 1. Profileur de mémoire pour silverlight
- 2. Profileur de mémoire C++
- 3. iPhone: Existence d'un profileur de fuite de mémoire?
- 4. Logiciel profileur de mémoire - Comment les utiliser? Exemples?
- 5. . Profileur de mémoire .net qui peut profiler les machines distantes
- 6. Comment repérer les fuites de mémoire dans le profileur?
- 7. Profileur C++ gratuit pour Windows
- 8. Y a-t-il un profileur d'utilisation de la mémoire disponible?
- 9. Profileur Flex ne fait rien
- 10. Profileur "Spike"?
- 11. combinaison de couverture et profileur?
- 12. meilleur profileur j2me
- 13. Y a-t-il un profileur Go?
- 14. profileur java haute performance
- 15. Profileur d'E/S de disque pour les applications existantes
- 16. Profileur de performances pour .NET avec une API
- 17. activer global profileur mysql
- 18. Quelle est la différence entre StringIO et io.StringIO dans Python2.7?
- 19. Comment activer le profileur de fonction PostgreSQL?
- 20. Existe-t-il un profileur de construction Visual Studio?
- 21. échantillon de temps Linux profileur basé
- 22. Profileur de temps dans les instruments
- 23. Comment puis-je déplacer mon site-packeges Python2.6 dans Python2.7?
- 24. Question sur le profileur de méthode DDMS
- 25. Comment configurer FTS3/FTS4 avec python2.7 sous Windows
- 26. Analyse de la mémoire pour un processus
- 27. réallocation de mémoire pour un tableau C++
- 28. Questions de profileur AQtime C/C++
- 29. Informations sur le profileur de requête
- 30. Besoin d'aide pour écrire un script pour exécuter le profileur sur le serveur
Avez-vous * vraiment * besoin de profiler votre code? Je ne faisais que demander! – user225312
"vérifier les statistiques de la mémoire des objets" Pourquoi? Quel problème ** spécifique ** avez-vous? Mémoire insuffisante? Le profilage n'est généralement pas nécessaire, c'est généralement * évident * quel objet est trop grand. Veuillez expliquer quel problème vous observez réellement. –
duplication possible de [profileur de mémoire Python] (http://stackoverflow.com/questions/110259/python-memory-profiler) –