首页 > 解决方案 > 在将协程引入 Python 之前,gevent 如何实现协作多任务处理?

问题描述

由于引入协程需要对 CPython 本身的实现进行相当多的更改,我想知道geventgreenlets实际上,事实证明)如何在不修改解释器的情况下进行协作多任务处理,例如 Stackless Python 项目。它是通过在 Python 中手动保存和恢复当前执行帧来实现的inspect吗?(可能不是)或者通过一个智能的 C 扩展来侵入 Python 解释器的实际堆栈并使用 hack 来获取 C 中的协程?或者 C 扩展在执行本身“外部”保存完整的 Python 内部执行框架?我对一般的想法很好奇。看一眼官方文档似乎并没有马上给出答案。

我不是在谈论事件循环实现或epolling,而是在单个进程中的“手动上下文切换”/“协作多任务”。

UPD:这是这个问题的副本,但我不知道如何相应地标记它。然而,目前尚不清楚他们是否使用类似longjmpsetcontext

标签: pythoncoroutinegeventpython-c-api

解决方案


推荐阅读