短
我的python程序占用了比预期更多的内存或由内存分析工具返回 . 我需要一个策略来查找内存泄漏并修复它 .
详细
我在64位Linux机器上运行python3脚本 . 几乎所有代码都捆绑在一个对象中:
obj = MyObject(*myArguments)
result = obj.doSomething()
print(result)
在创建 obj 期间,程序将读取大小为ca.的文本文件 . 100MB . 由于我以多种方式保存信息,我希望整个对象占用几个hundret MB内存 .
实际上,从包pympler中使用 asizeof.asized(obj) 测量其大小会返回大约123MB . 然而, top 告诉我,我的程序占据了大约 1GB 内存 .
我知道方法中的局部变量会占用更多的RAM . 但是,查看我的代码,我发现这些局部变量都不会那么大 . 我再次使用 asizeof.asized 再次检查了这一点 .
我不担心脚本需要1GB的内存 . 但是,我并行执行了一些方法(在12个方面):
class MyObject()
def doSomething(arg):
# do something
def myParallelMethod(args)
with sharedmem.MapReduce() as pool:
result = pool.map(self.doSomething, args)
return result
这使得总内存使用量变为 8GB ,即使我将所有大对象放在共享内存中:
self.myLargeNumPyArray = s