python - 在将协程引入 Python 之前,gevent 如何实现协作多任务处理?
问题描述
由于引入协程需要对 CPython 本身的实现进行相当多的更改,我想知道gevent
(greenlets
实际上,事实证明)如何在不修改解释器的情况下进行协作多任务处理,例如 Stackless Python 项目。它是通过在 Python 中手动保存和恢复当前执行帧来实现的inspect
吗?(可能不是)或者通过一个智能的 C 扩展来侵入 Python 解释器的实际堆栈并使用 hack 来获取 C 中的协程?或者 C 扩展在执行本身“外部”保存完整的 Python 内部执行框架?我对一般的想法很好奇。看一眼官方文档似乎并没有马上给出答案。
我不是在谈论事件循环实现或epoll
ing,而是在单个进程中的“手动上下文切换”/“协作多任务”。
UPD:这是这个问题的副本,但我不知道如何相应地标记它。然而,目前尚不清楚他们是否使用类似longjmp
或setcontext
?
解决方案
推荐阅读
- terraform - 如何在 terraform 模块中检索我的安全组 ID
- javascript - 事件监听器“记得”之前获取的数据?
- r - 如何使来自`map_dfc()`的“新名称”消息静音?
- c++ - 如何在c ++中将lua函数从一个lua_State复制到另一个lua_State
- mongodb - MongoDB 日期比较不适用于 $date
- c# - 在 Xamarin Forms 中重新启动活动时保持 Switch 值
- python - 如何使用 mplfinance 在绘图的其他线条上方显示蜡烛?
- unity-container - 错误一个实体对象不能被多个 IEntityChangeTracker 实例引用
- rust - 无法在 windows rust 上建立 bevy
- python - werkzeug.security import generate_password_hash 运行不正常