美文网首页
python解释器终止机制坑爹 2023-12-03

python解释器终止机制坑爹 2023-12-03

作者: 9_SooHyun | 来源:发表于2023-12-02 23:35 被阅读0次

当Python解释器终止时,它会尝试按照以下顺序销毁对象:

  • 执行已注册的atexit函数。
  • 逐个销毁模块。在销毁模块时,解释器会将模块的全局变量设置为None。然而,如果存在其他对象仍然持有这些全局变量的引用,那么这些全局变量将不会被完全销毁,因为它们的引用计数不为0。
  • 对于其他仍然存在的对象,解释器会尝试销毁它们。由于这些对象可能仍然持有全局变量的引用,因此在销毁这些对象时,它们所依赖的全局变量仍然存在。

然而在某些情况下,当解释器销毁模块时,可能会出现一些问题。例如,如果一个对象在其__del__方法中引用了一个模块,那么在解释器销毁该模块时,可能会出现NameError异常。这是因为解释器在销毁模块时,会将模块的全局变量设置为None,而不是完全销毁它们。

个人认为这个机制是不合理的。任何工程启动服务的时候,要自底向上逐层启动;停止服务的时候,应当自顶向下释放资源

为什么Python解释器要首先销毁所有的模块和全局变量,然后再销毁对象?这样的话,上层对象中引用的一些底层全局依赖先被销毁,上层对象后被销毁,很容易引起奇奇怪怪的异常。。

为了避免这种问题,python只能通过一些强制手段或者兜底catch去保障解释器的“正常”结束:

  • 使用atexit模块来注册一些在程序终止时执行的清理函数
  • 在程序终止之前手动执行一些清理操作
  • __del__方法中捕获可能出现的异常

相关文章

  • 02-Python解释器

    目标 解释器的作用 下载Python解释器 安装Python解释器 一. 解释器的作用 Python解释器作用:运...

  • python多线程

    python基础之多线程锁机制 GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析...

  • 运行Python程序的三种方式

    1、python和python3解释器 1) python解释器 2) python3解释器 2、交互式运行 1)...

  • [CSP] 2019a2-二十四点

    说明 Python自带的eval()函数可计算符号表达式, 例如 由于CSP的坑爹机制, 输入数据用的方法是20年...

  • 2. 使用 Python 解释器

    2. 使用 Python 解释器 2.1. 调用 Python 解释器 Python 解释器通常被安装在目标机器的...

  • Python基础

    Python基础 Python是一门多范式编程语言。 Python的执行 解释器有C语言解释器,JAVA解释器,等...

  • [python_doc]python_3.7_chapter.2

    第二章 使用python解释器 2.1调用python解释器 python解释器一般被存放在 /usr/local...

  • Python执行方式

    执行 Python 程序的三种方式 1. 解释器 python / python3 Python 的解释器 使用 ...

  • Python如何运行程序

    Python的运行 Q:什么是Python解释器 A:Python 解释器是运行Python程序的程序 Q:什么是...

  • Python基础手册3——Python解释器

    一、Python解释器 我们编写的Python代码都要放在Python解释器上运行,解释器是代码与计算机硬件之间的...

网友评论

      本文标题:python解释器终止机制坑爹 2023-12-03

      本文链接:https://www.haomeiwen.com/subject/cdrkgdtx.html