03 2022 档案

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