cProfile占用了大量内存

时间:2011-03-10 22:28:34

标签: python memory cprofile

我试图在python中配置我的项目,但是我的内存不足。

我的项目本身是内存密集型的,但是当在cProfile下运行时,即使是一半的运行也会因“MemoryError”而死亡。

进行较小的运行不是一个好的选择,因为我们怀疑运行时是超线性缩放,我们正在尝试发现哪些函数在大运行期间占主导地位。

为什么cProfile占用了这么多内存?我可以减少花费吗?这是正常的吗?

1 个答案:

答案 0 :(得分:1)

已更新:由于cProfile内置于当前版本的Python(_lsprof扩展名)中,因此应使用主分配器。如果这对您不起作用,Python 2.7.1有一个--with-valgrind编译器选项,使其在运行时切换到使用malloc()。这很好,因为它避免了必须使用抑制文件。您可以构建一个仅用于分析的版本,然后在valgrind下运行您的Python应用程序,以查看分析器以及使用自定义分配方案的任何C扩展所做的所有分配。

(其余原始答案如下):

也许试着看看分配的去向。如果您的代码中有一个可以定期转储内存使用量的位置,则可以使用guppy查看分配:

import lxml.html
from guppy import hpy

hp = hpy()
trees = {}
for i in range(10):
    # do something
    trees[i] = lxml.html.fromstring("<html>")
    print hp.heap()

    # examine allocations for specific objects you suspect
    print hp.iso(*trees.values())