【发布时间】:2018-08-20 16:40:11
【问题描述】:
我正在使用内部 Python 库进行科学计算。我需要连续复制一个对象,修改它,然后删除它。该对象很大,导致我的机器在几个周期后耗尽内存。
第一个问题是我使用python的del删除对象,这显然只是取消引用对象,而不是释放RAM。
第二个问题是,即使我将整个过程封装在一个函数中,调用该函数后,RAM仍然没有被释放。这是一个代码 sn-p 可以更好地解释这个问题。
ws = op.core.Workspace()
net = op.network.Cubic(shape=[100,100,100], spacing=1e-6)
proj = net.project
def f():
for i in range(5):
clone = ws.copy_project(proj)
result = do_something_with(clone)
del clone
f()
gc.collect()
>>> ws
{'sim_01': [<openpnm.network.Cubic object at 0x7fed1c417780>],
'sim_02': [<openpnm.network.Cubic object at 0x7fed1c417888>],
'sim_03': [<openpnm.network.Cubic object at 0x7fed1c417938>],
'sim_04': [<openpnm.network.Cubic object at 0x7fed1c417990>],
'sim_05': [<openpnm.network.Cubic object at 0x7fed1c4179e8>],
'sim_06': [<openpnm.network.Cubic object at 0x7fed1c417a40>]}
我的问题是如何完全删除 Python 对象?
谢谢!
附言。在代码sn-p中,每次调用ws.copy_project,都会在ws字典中保存一份proj的副本。
【问题讨论】:
-
我可以对您的代码进行一些澄清。您是说
proj很大并导致内存问题,对吧?但是您在f中显示的循环只是让您将proj的十个副本添加到列表中。你有什么东西可以作用于数据并且可以给你一个更小的结果,或者可以将大数据存储在一个文件中?鉴于其中任何一个,我都可以提出解决方案。刚刚给出“这个很大,我想要十个”,我帮不了你。 (虽然简化的代码对我们很有帮助,但这似乎被简化到充满错误的地步。) -
@ScottMermelstein 感谢您的回复。我编辑了这个问题。澄清一下,问题是即使我在每次迭代后删除
clone,RAM 也不会被释放。
标签: python memory memory-management memory-leaks heap-memory