如何在python中取消引用模块和释放内存?

问题描述 投票:0回答:1

我正在一个项目中,我需要取消引用模块并释放其内存以进行进一步的模型训练。在这里,我提到了在某些块之后具有内存使用的演示代码。我使用了垃圾回收以及del函数,但对我来说不起作用。

import psutil
import sys
import gc
sys.path.insert(0,'/scripts_v2')

process = psutil.Process()
mem = process.memory_info().rss/(1024**2)
print(mem)

import pandas as pd

process = psutil.Process()
mem = process.memory_info().rss/(1024**2)
print(mem)

sys.modules.pop('pandas')
#del pd

gc.collect()

process = psutil.Process()
mem = process.memory_info().rss/(1024**2)
print(mem)

我在特定代码块之后计算了内存。在这里,我提到了上面代码的输出。

You can see that before and after deleting the pandas library, its memory is still 60.65 MB. How can I free its memory?

您可以看到在删除熊猫库前后,它的内存仍然为60.65 MB。如何释放内存?

python garbage-collection python-module
1个回答
0
投票

在Python中删除变量,模块或任何东西,不必释放其内存。初始化时,Python只是缓存某些类型。

您的问题很可能是由于pandas库中某些对象的缓存引起的,据我所知,您无法释放Python的内部缓存。可能有一种方法可以做到,但是它绝对太笨拙了,甚至都不会打扰。如果您需要对某个项目中的内存进行100%的控制,那么Python将无济于事。要获取有关该主题的更多信息,请参见答案here,尤其是此answer

请注意,delgc.collect()可能会释放内存,只是它们没有必要。

编辑:sys.modules.pop('pandas')不会导入pandas,您可以通过执行print(pd.__version__)来查看。但是,如果您实际上使用指定的方法here导入库,则会发生相同的内存问题。

© www.soinside.com 2019 - 2024. All rights reserved.