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 @ 2022-03-25 23:47  鸪斑兔  阅读(198)  评论(0编辑  收藏  举报