我正在尝试用python分析我的项目,但是我的内存快用完了。
我的项目本身是内存密集型的,但在cProfile下运行时,即使是一半大小的运行也会死于"MemoryError“。
进行较小的运行不是一个好的选择,因为我们怀疑运行时是超线性扩展的,并且我们试图发现哪些函数在大运行期间占主导地位。
为什么cProfile占用这么多内存?我能让它花更少的时间吗?这是正常的吗?
发布于 2011-03-11 06:35:49
PythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatePythonUpdatedPythonUpdatePython.PythonUpdatePython.PythonUpdatedPython.PythonUpdatePython.PythonUpdatedPython.PythonUpdatedPythonUpdatedPython.PythonUpdatedPyth如果这对你不起作用,Python2.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())https://stackoverflow.com/questions/5266699
复制相似问题