当python会话/终端被强制关闭或终止时,代码中列出的其他数据结构占用的内存是否会自动释放(我指的是垃圾回收)?
发布于 2018-08-09 12:00:37
是的,附加到该终端的Python进程会释放所有获取的内存。这不仅适用于Python,也适用于终端中的独立进程(无依赖项)。
这在使用GPU时尤其重要,因为许多模块(例如tensorflow
/Pytorch
)依赖于对GPU的完全控制。
发布于 2018-08-09 12:31:51
是的,假设它是父进程。如果你杀死了父进程,所有的内存都应该被释放回来。
在父进程仍在运行但内存需求随时间变化的情况下,Python的垃圾收集器就会发挥作用。你一开始是把一个大文件读入到一个列表中,然后在处理列表中的项目时删除了这些项目。在这个场景中,您应该会看到内存使用量的减少,但它永远不会下降到创建列表之前的水平(即使您del
整个列表)。这是因为python试图“提前考虑”,并且不会释放一些内存,以防您的进程再次请求它。
另一个有趣的例子是使用python's multiprocessing库。如果您没有正确关闭池,子进程使用的内存可能不会被释放。
我想你只是关心当你打开一个REPL,运行一些操作并杀死shell时会发生什么。在这种情况下,内存被释放回来。
https://stackoverflow.com/questions/51766387
复制