栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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收集运行之后也是如此。模块终结器只需减少其引用计数即可。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号