【问题标题】:how to dereference a module and free memory in python?如何在python中取消引用模块并释放内存?
【发布时间】:2020-04-02 11:07:58
【问题描述】:

我正在开展一个项目,我需要取消对模块的引用并释放其内存以进行进一步的模型训练。在这里,我提到了在某些块之后使用内存的演示代码。 我使用了垃圾收集以及 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)

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

可以看到删除pandas库前后,它的内存还是60.65MB。如何释放它的内存?

【问题讨论】:

  • 这能回答你的问题吗? How to de-import a Python module?
  • 没有。我可以删除一个模块。我想在删除模块后释放它的内存。从附图中可以看出,删除pandas库前后系统使用的内存是一样的。

标签: python garbage-collection python-module


【解决方案1】:

在 Python 中删除一个变量、一个模块或任何东西,并不一定要释放它的内存。当你初始化它们时,Python 只是简单地缓存了一些类型。

您的问题可能是由于 pandas 库中某些对象的缓存引起的,据我所知,您无法释放 Python 的内部缓存。可能有一种方法可以做到这一点,但它肯定会太笨拙以至于无法打扰。如果你需要在某个项目中 100% 控制你的内存,那么 Python 对你帮助不大。要获取有关该主题的更多信息,请参阅答案here,尤其是此answer

请注意,delgc.collect() 可能会释放内存,只是它们不必这样做。

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

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2019-10-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多