我有一个Python程序,当我将它提供给一个大文件时会死于MemoryError。是否有任何工具可以用来确定使用内存的是什么?
这个程序在较小的输入文件上运行良好。该程序显然需要一些可扩展性改进;我只想弄清楚在哪里。 “优化之前的基准”,正如一位聪明人曾经说过的那样。
(只是为了防止不可避免的“添加更多RAM”答案:这是在一个带有4GB RAM的32位WinXP盒子上运行,因此Python可以访问2GB的可用内存。从技术上讲,添加更多内存是不可能的。重新安装我的使用64位Windows的PC是不实用的。)
的副本答案 0 :(得分:9)
Heapy是Python的内存分析器,它是您需要的工具类型。
答案 1 :(得分:3)
最简单轻量的方法可能是使用Python的built in memory query capabilities,例如sys.getsizeof
- 只需在你的对象上运行它以减少问题(即一个较小的文件),看看需要什么很多记忆。
答案 2 :(得分:2)
在您的情况下,答案可能非常简单:不要一次读取整个文件,而是按块处理文件块。根据您的使用场景,这可能非常简单或复杂。例如,对于大型文件,可以更有效地完成MD5校验和计算,而无需读取整个文件。后一种更改大大减少了某些SCons使用场景中的内存消耗,但几乎不可能使用内存分析器跟踪。
如果你还需要内存探查器:eliben已经建议使用sys.getsizeof。如果没有削减它,请尝试Heapy或Pympler。
答案 3 :(得分:1)
您要求提供工具建议:
Python Memory Validator允许您监视Python应用程序的内存使用情况,分配位置,GC集合,对象实例,内存快照等。仅限Windows。
http://www.softwareverify.com/python/memory/index.html
免责声明:我参与了该软件的创建。