03 2022 档案
摘要:Python解释器启动流程:main -> Py_BytesMain -> pymain_main -> Py_RunMain -> pymain_run_python pymain_run_command:以python -c "import os;os.system('pause')"的方式运行
阅读全文
摘要:Py_Initialize 完成Python解释器的初始化 Py_FinalizeEx Py_Initialize的逆操作,释放所有Python申请的资源。有时Python不是以独立进程运行的,而是被动态加载到其它进程里面,此时用该函数就可以释放Python的资源而不影响主进程的执行。Python独
阅读全文
摘要:Python解释器的资源的申请和释放都由主线程完成 全局变量_PyRuntimeState中有一个字段_finalizing就是标记python解释器是否正在退出,这个字段在解释器初始化时被设置为null 当主线程要退出时(在Py_RunMain中调用Py_FinalizeEx,会开始主线程的退出流
阅读全文
摘要:https://rushter.com/blog/python-gil-thread-scheduling/ import threading from types import SimpleNamespace DEFAULT_INTERVAL = 0.05 gil_mutex = threadin
阅读全文
摘要:申请GIL static void take_gil(PyThreadState *tstate) { ... // 获取mutex,然后就可以安全地访问GIL了 MUTEX_LOCK(gil->mutex); // 不断检查GIL状态,一直等到GIL被释放 while (_Py_atomic_lo
阅读全文
摘要:1、GIL的作用:保证任意时刻仅有一个线程在执行,防止多线程并发执行导致的数据异常。 2、操作系统的pthread_mutex_t也能达到线程互斥的作用,为什么不用? 注:Linux 环境中,实现线程同步的常用方法有 4 种,分别称为 互斥锁 、 信号量 、 条件变量 和 读写锁 。 互斥锁 (Mu
阅读全文
摘要:1、Python虚拟机参数 2、Python代码中的宏定义常量 3、pyc文件剖析 4、AST 5、site模块 6、import hook
阅读全文