我正在一个项目中,我需要取消引用模块并释放其内存以进行进一步的模型训练。在这里,我提到了在某些块之后具有内存使用的演示代码。我使用了垃圾回收以及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)
我在特定代码块之后计算了内存。在这里,我提到了上面代码的输出。
您可以看到在删除熊猫库前后,它的内存仍然为60.65 MB。如何释放内存?
在Python中删除变量,模块或任何东西,不必释放其内存。初始化时,Python只是缓存某些类型。
您的问题很可能是由于pandas库中某些对象的缓存引起的,据我所知,您无法释放Python的内部缓存。可能有一种方法可以做到,但是它绝对太笨拙了,甚至都不会打扰。如果您需要对某个项目中的内存进行100%的控制,那么Python将无济于事。要获取有关该主题的更多信息,请参见答案here,尤其是此answer。
请注意,del
和gc.collect()
可能会释放内存,只是它们没有必要。
编辑:sys.modules.pop('pandas')
不会导入pandas
,您可以通过执行print(pd.__version__)
来查看。但是,如果您实际上使用指定的方法here导入库,则会发生相同的内存问题。