作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] python资源回收
时间Tue Aug 30 15:18:12 2011
※ 引述《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
1F:推 b60413:感谢解答! 08/30 16:06
2F:推 wadd:推~长知识 08/30 16:22