Python线程的生命周期

Python解释器的资源的申请和释放都由主线程完成

全局变量_PyRuntimeState中有一个字段_finalizing就是标记python解释器是否正在退出,这个字段在解释器初始化时被设置为null

当主线程要退出时(在Py_RunMain中调用Py_FinalizeEx,会开始主线程的退出流程),主线程会将_finalizing设置为自己

其它所有的线程在竞争获取GIL时,会首先检查_finalizing是否被设置了,若被设置,则马上放弃GIL的竞争并退出线程

这样在一段时间后,就只剩下主线程自己了

主线程会完成资源的释放工作。

 

要注意的是,Py_FinalizeEx可以在Py_RunMain外调用,其效果是释放所有python解释器的资源(而不影响所属的进程)

这个操作存在的意义在于:一些进程通过加装python的库的方式启动python,此时python并没有独立进程,此时python所属进程就可以通过Py_FinalizeEx释放Python的资源而不影响运行。

posted @   鸪斑兔  阅读(220)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示