基本上,我有一個很長的運行過程,我希望能夠通過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