You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gevent如何保障同一线程下不同协程的thread-local变量不共享?

核心原理:gevent通过猴子补丁(monkey patch)替换了标准库threading的实现

  • 当你使用gunicorn --worker-class gevent启动项目时,gevent会自动对Python标准库做猴子补丁,其中就包含对threading模块的重写
  • 打补丁后,threading.currentThread()的返回值不再是操作系统级别的原生线程对象,而是当前运行协程对应的独立伪装Thread对象:哪怕多个协程运行在同一个操作系统线程中,不同协程调用threading.currentThread()拿到的都是专属自己的对象,给这个对象设置的属性自然是协程隔离的,不会互相影响

设计初衷就是兼容原有线程代码

gevent的猴子补丁设计目标就是让原有基于线程模型编写的业务代码不需要任何修改,就能直接运行在协程模型下享受协程的性能收益,所以不需要你把代码改成手动获取当前协程再设属性的写法,补丁已经帮你做了逻辑兼容。

额外说明:不仅是currentThread()的属性隔离,threading.local线程本地存储在打补丁后也会自动变为协程本地存储,同样保持协程级别的隔离性,原有基于threading.local的逻辑也不需要修改。

内容的提问来源于stack exchange,提问作者Tanen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:54:03