Comment déboguer une erreur MemoryError en Python? Des outils pour suivre l'utilisation de la mémoire?
J'ai un programme en Python qui meurt avec un MemoryError lorsque je de lui donner un gros fichier. Existe-il des outils que je pourrais utiliser pour comprendre ce à l'aide de la mémoire?
Ce programme fonctionnait bien sur les petits fichiers d'entrée. Le programme a bien besoin de quelques améliorations en termes d'évolutivité; je suis juste essayer de comprendre d'où. "De référence avant d'optimiser", comme une personne sage a dit une fois.
(Juste pour prévenir l'inévitable "ajouter plus de RAM" réponse: C'est en cours d'exécution sur un 32 bits WinXP boîte avec 4 go de RAM, de sorte que Python a accès à 2 go de mémoire utilisable. L'ajout de mémoire n'est pas techniquement possible. La réinstallation de mon PC avec Windows 64 bits n'est pas pratique.)
EDIT: Oups, c'est un doublon de Qui Python memory profiler est recommandé?
source d'informationauteur user9876
Vous devez vous connecter pour publier un commentaire.
Heapy est un profileur de mémoire pour Python, qui est le type d'outil dont vous avez besoin.
Le plus simple et léger, moyen serait probablement d'utiliser le intégré dans la mémoire, les capacités d'interrogation de Python, comme
sys.getsizeof
- il suffit de l'exécuter sur vos objets pour une réduction du problème (c'est à dire un fichier de petite taille) et de voir ce qui prend beaucoup de mémoire.Dans votre cas, la réponse est probablement très simple: Ne pas lire le fichier en entier à la fois, mais de traiter le fichier de morceau par morceau. Qui peut être très simple ou complexe selon le scénario d'utilisation. Juste pour exemple, une somme de contrôle MD5 calcul peut être fait de manière beaucoup plus efficace pour les gros fichiers sans avoir à lire tout le fichier. Le dernier changement a considérablement réduit la consommation de mémoire dans certains SCons scénarios d'utilisation, mais a été presque impossible de tracer à l'aide d'un profileur de mémoire.
Si vous avez encore besoin d'un profileur de mémoire: eliben déjà suggéré sys.getsizeof. Si cela ne fonctionne pas, essayez Heapy ou Pympler.
Vous avez demandé un outil de recommandation:
Python de la Mémoire du programme de validation vous permet de surveiller l'utilisation de la mémoire, de l'attribution des emplacements, GC collections, les instances d'objet, instantanés de la mémoire, etc de votre application en Python. Windows uniquement.
http://www.softwareverify.com/python/memory/index.html
Avertissement: j'ai été impliqué dans la création de ce logiciel.