Python的关闭程序记录在哪里?

Python的关闭程序记录在哪里?,第1张

Python的关闭程序记录在哪里?

该行为 没有得到 充分的记录,并且在从1.5到ish _直至 Python
3.4的
_所有版本的Python中都存在该行为:

作为此更改的一部分,

None
在大多数情况下,在解释器关闭期间不再强制将模块全局设置为设置,而是依靠循环垃圾收集器的正常 *** 作。

该行为的唯一文档是

moduleobject.c
源代码:

请注意,将值设置

None
为最优。另一种选择是从映射中删除名称,这将导致不同的错误(尝试从处理程序中使用全局变量时,将使用
NameError
异常而不是
AttributeError
s
__del__
)。

正如您在邮件列表中发现的那样,此行为早于循环垃圾收集器;它是在1998年添加的,而循环垃圾收集器是在2000年添加的。由于功能对象始终引用模块,因此模块中的

__dict__
所有功能对象都包含循环引用,这就是为什么
__dict__
在GC发挥作用之前需要进行清除的原因。

即使添加了循环GC,也可以将其保留在原位,因为可能有对象

__del__
涉及循环方法。这些在其他方面是不可回收的,清理模块字典至少会
__dict__
从此类循环中删除模块。不这样做将使该模块的
所有 引用的全局变量保持活动状态。

现在,对PEP
442所做的更改使垃圾回收器可以使用提供

__del__
终结器的对象清除循环引用,从而在
__dict__

大多数情况下
无需清除模块。代码仍然存在,但是仅当该
__dict__
属性仍然有效时才触发,即使将其内容
sys.modules
移至弱引用并在解释器关闭时启动GC收集运行之后也是如此。模块终结器只需减少其引用计数即可。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5617839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存