11

我有一个 Python 程序,当我给它一个大文件时,它会因 MemoryError 而死。有什么工具可以用来找出内存在使用吗?

该程序在较小的输入文件上运行良好。该程序显然需要一些可扩展性改进;我只是想弄清楚在哪里。正如一位智者所说,“在优化之前先进行基准测试”。

(只是为了防止不可避免的“添加更多 RAM”答案:这是在具有 4GB RAM 的 32 位 WinXP 机器上运行的,因此 Python 可以访问 2GB 的可用内存。增加更多内存在技术上是不可能的。用 64 重新安装我的 PC -bit Windows 不实用。)

编辑:糟糕,这是推荐使用哪个 Python 内存分析器的副本?

4

4 回答 4

10

Heapy是 Python 的内存分析器,这是您需要的工具类型。

于 2009-11-05T16:39:43.417 回答
4

最简单和轻量级的方法可能是使用 Python 的内置内存查询功能,例如sys.getsizeof- 只需在您的对象上运行它以减少问题(即较小的文件)并查看占用大量内存的内容。

于 2009-11-05T16:51:25.497 回答
2

在您的情况下,答案可能很简单:不要一次读取整个文件,而是逐块处理文件。根据您的使用场景,这可能非常简单或复杂。举个例子,对于大文件,MD5 校验和计算可以更有效地完成,而无需读取整个文件。后一种变化在某些 SCons 使用场景中显着减少了内存消耗,但几乎不可能使用内存分析器进行跟踪。

如果您仍然需要内存分析器:eliben 已经建议使用 sys.getsizeof。如果还是不行,试试 Heapy 或 Pymler。

于 2009-11-08T20:09:03.627 回答
1

您要求提供工具推荐:

Python Memory Validator 允许您监控 Python 应用程序的内存使用情况、分配位置、GC 集​​合、对象实例、内存快照等。仅限窗户。

http://www.softwareverify.com/python/memory/index.html

免责声明:我参与了该软件的创建。

于 2010-02-05T17:53:34.963 回答