Re: [問題] python資源回收
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章