回复:如何调试内存使用情况?
5月6日,上午6:27,大卫
但是您可以在标准构建中使用一些技巧
检测内存泄漏.最简单的是简单地观看
RSS列输出`ps aux'(我假设您正在使用unix).
我从Chris Siebenmann http://utcc.utoronto.ca/~cks/space/b.../getallobjects获得的另一个技巧
我修改了他的例子.这不会告诉你如何
您的运行代码正在使用的许多内存字节,但它将
向您展示对象的数量.在寻找内存泄漏时,
计算物体数量足以检测泄漏.
例如,假设您怀疑一个功能正在泄漏内存.
您可以将其称为这样的循环,并观看
每次通话之前和之后的对象.
而真:
打印"数字对象:",len(get_all_objects())
suspect_function()
打印"数字对象:",len(get_all_objects())
这是我修改的Chris get_all_object()函数的修改版.
我所做的就是使用gc.collect()强制垃圾收集.
这确保您不计算Python拥有的对象
留在记忆中,但计划在某个时候删除.
导入GC
#递归扩展SLIST的对象
#进入olist,使用可见的跟踪
#已经处理过的对象.
def _getr(slist,olist,看到):
对于e slist:
如果ID(e)在看到:
继续
看到[id(e)] =无
olist.Append(E)
tl = gc.get_referents(e)
如果TL:
_getr(tl,olist,看到)
#公共功能.
def get_all_objects():
"""返回所有现场python对象的列表,不包括
列出本身."""
gc.collect()
gcl = gc.get_objects()
olist = []
SEED = {}
# 以防万一:
看到[id(gcl)] =无
看到[id(olist)] =无
看到[id(Seece)] =无
#_getr做真实的工作.
_getr(gcl,olist,看到)
返回olist
- -
诺亚