我创建了一个大的多维数组M
。np.zeros((1000,1000))
经过一定数量的操作后,我不再需要它了。如何在程序执行期间动态释放 RAM?为我做M=0
吗?
问问题
8225 次
3 回答
16
一般来说你不能。即使您删除了对对象的所有引用,它也留给 python 实现来重用或释放内存。在 CPython 上,您可以调用gc.collect()
强制垃圾收集运行。但是,虽然这可能会回收内存,但不一定会将其返回给操作系统。
但是:numpy 是一个扩展模块,它做自己的事情,并管理自己的内存。
当我监视 python 进程的内存使用情况时,我看到 RAM 使用情况(驻留集大小)在之后下降del(M)
In [1]: import numpy as np
In [2]: M = np.zeros((1000,1000))
In [3]: del(M)
In [4]:
在启动 IPython 之后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 0.5 119644 22692 0 S+ 2:37PM 0:00.39 /usr/local/bin/py
导入 numpy (1) 后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 1.0 0.8 168548 32420 0 S+ 2:37PM 0:00.49 /usr/local/bin/py
创建数组 (2) 后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 1.0 176740 40328 0 S+ 2:37PM 0:00.50 /usr/local/bin/py
调用del
(3) 后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 0.8 168548 32496 0 S+ 2:37PM 0:00.50 /usr/local/bin/py
slackbox:~>
所以在这种情况下使用del()
可以减少使用的 RAM 量。
请注意,numpy 有一个例外。Numpy 可以使用由另一个扩展库分配的内存。在这种情况下,numpy 对象被标记为 numpy 不拥有内存,并将其释放留给另一个库。
于 2013-04-30T12:41:04.940 回答
4
于 2013-04-30T12:23:56.073 回答
1
有两种方法......
1)。德尔米
But it will delete the array object it self.
2)。M.clear()
you can clear the array without deleting M object
于 2013-04-30T12:23:40.863 回答