Python 运行时与 gevent
这个系列来自开发 Python 运行时诊断工具 peeka 的经验,适合需要排查线上 Python 服务、或者想理解 gevent 底层的读者。先看外部工具如何进入一个正在运行的进程,再看 gevent 为什么会让诊断工具卡住, 然后梳理 Python 各层观测接口的边界,最后回到 gevent 本身,看它的技术路线是怎么一步步走出来的。
-
理解 Python 进程注入:从 ptrace 到 PEP 768
不重启线上 Python 进程,如何把诊断代码送进去?梳理 pyrasite 的 GDB 调用、memray/peeka 的 dlopen + pthread,以及 Python 3.14 的 PEP 768。
-
gevent monkey patch 对 profiling 工具的影响
为什么 attach agent 在 gevent 进程里报初始化超时?用 _socket 和 _thread 绕开 monkey patch 修复控制面,并说明 trace、top 在 gevent 下的观测盲区。
-
Python 运行时观测的四条边界:frame、code object、greenlet、task
按 frame、code object、greenlet、Task 四层,讲清 sys.settrace、sys.monitoring、greenlet.settrace 和 asyncio Task API 各能看到什么,以及 gevent 下的事件错位。
-
gevent 的技术路线:从 yield 到 greenlet、Hub 与 monkey patch
从 yield 只能暂停一层 frame 讲起,看 greenlet 如何搬走整段调用栈,Hub 如何调度,monkey patch 又如何让同步代码变成协作式 I/O。