Re: [問題] python資源回收

看板Python作者 (←這人是超級笨蛋)時間14年前 (2011/08/30 15:18), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《b60413 (None)》之銘言: : 請問import module後,可以unload module嗎? : 網路上說明可以使用 : del module : del sys.modules['module'] : sys.modules['module']=None : 可是我在檢視程式所使用的Memory時 : Memory一樣沒減少(回收) : 請問是哪邊有問題嗎?或者Python並不能做資源回收? 資源回收當然可以 Python 本身使用 reference counting 來管理記憶體 你也可以透過 gc 這個 module 來自己搞一個 garbage collection 不過這也不一定會有你希望的功效 因為 Python 為了提升效能有一些內部的 caching 機制 即使你把東西 del 掉, 記憶體也不見得就會回來 至於卸載 module 則是辦不到 http://bugs.python.org/issue9072 Supporting unloading will be (and was) a multi-year project. Don't expect any results in the next five years. 話又說回來 在一個擁有 garbage collection 機制的語言中, 煩惱這個實在太杞人憂天了 當然 memory leaking 不是不可能發生, 不過一般而言是發生在 C layer 在 Python 這邊只要避免 cycle referencing 基本上就可以避免 leaking 而既然 leaking 不會發生, 記憶體使用量根本不是問題 除非你是在寫巨無霸型程式例如 Eclipse, 不然這年頭根本不差那麼一點... 至於如果你真的要寫巨無霸的話, 就別用 Python 了吧 : 另外請問使用pyc跟pyd去載入module的差異是什麼? : pyc是python complie過的檔案、pyd是python dll : 但兩者在被python import之後有差別嗎? : 謝謝 pyc 副檔名代表 Python Byte-Compiled Module Python 會把原始的 py 檔案預先編譯成 bytecodes 以提升 module 執行時的效能 這個檔案是 platform independent 但 version dependent 也就是說你把這個 pyc 檔拿到 Windows, Linux, Mac OS X 等等等都可以用 但是使用的 Python 直譯器版本一定要一樣, 否則(可能)會不相容 pyd 則就是一個 Windows DLL 檔, 所以想當然爾是 platform dependent (只有 Windows 能用, 而且有可能因為作業系統版本差異而互不相容) 不過一旦被 import 後, 兩者是一樣的 -- "問おう、貴方が私のマスターか?" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.94.61

08/30 16:06, , 1F
感謝解答!
08/30 16:06, 1F

08/30 16:22, , 2F
推~長知識
08/30 16:22, 2F
文章代碼(AID): #1EN8wtK4 (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1EN8wtK4 (Python)