基本上,我有一个很长的运行过程,我希望能够通过gc卸载模块并恢复内存。我读过关于删除模块How do I unload (reload) a Python module?,它似乎仍然存在悬挂gc引用。如果我将它导入到名称空间中,我可以可靠地取消导入Python模块吗?
但是,如果我只在名称空间内导入和使用模块,该怎么办。换句话说,这样的事情:
ns = {}
exec somecode in ns
然后,我会清理命名空间内的sys.modules,并通过删除命名空间本身来完成。
会释放内存在CPython中重用吗?
如果没有,那么是有可能访问使用ctypes的Python的C API的某些部分,做到这一点?
最终结果的重要的部分是,存储器被释放以使得在运行过程中几个星期或几个月,能够可靠地unimport一个模块没有重新加载它。当然,在这段时间内,任何给定的模块都可以被加载和卸载很多次。我假设一个模块可以在加载时创建大量对象,并且正常清理(sys.modules和del)会将这些对象永远留在内存中。
约亨:是的,我可以解决这个在许多方面,但我有兴趣探索的Python的限制。
你肯定你无法通过移动相关的功能整合到一个独立的功能运行与解决此[多](http://docs.python.org/library/multiprocessing.html)或[子] (http://docs.python.org/library/subprocess.html)? – 2011-05-31 01:33:06
听起来像很多工作来节省几个字节。您是否导入了数千个模块,或者为什么您认为卸载它们会值得? – 2011-05-31 01:34:57