我的脚本内存泄漏,我把它缩小到np.repeat
。理论上,如果我有一个np.array
有它自己的指针,叫做arr
,我做一个arr_repeated = arr.repeat(10, axis = 0)
,然后对它们做del
,它们占用的内存应该被释放吗?你知道吗
我正在核实:
psutil.Process(os.getpid()).memory_info().rss
更具体地说,在下面的代码中memory_before
和memory_after
应该是不同的吗?你知道吗
arr = np.array([[1,2,3,...], [...], [...]])
arr_repeated = arr.repeat(10, axis = 0)
memory_before = psutil.Process(os.getpid()).memory_info().rss
del arr
del arr_repeated
memory_after = psutil.Process(os.getpid()).memory_info().rss
我有
extra/python-numpy 1.13.1-2 [installed]
在我的安特戈斯/拱门上
仅仅因为使用了
del
变量并不意味着内存会立即被释放。它只是删除变量的名称。Pythons引用计数机制和gc
负责释放内存。你知道吗因此,为了安全起见,您需要使用^{} 强制
gc
清除所有可能包含循环引用的内容,否则Python将“随时”清除这些内容(可能只有在内存越来越少或在特定时间之后)。你知道吗例如the documentation about ^{} 包含以下注释:
请注意,
gc
还有一个用于检测泄漏的设置:gc.set_debug(gc.DEBUG_LEAK)
不确定它究竟是如何工作的,但它可能值得一试,而不是使用psutil
。你知道吗相关问题 更多 >
编程相关推荐