如何实现低级异步IO功能

Joe*_*e C 1 python asynchronous python-3.x async-await python-asyncio

Python 可以在等待 asyncio.sleep 和 aiohttp 函数时切换上下文。python 最终如何知道上下文何时需要切换?如果我想实现自己的IO功能,需要调用哪些API?

基于http://www.dabeaz.com/coroutines/Coroutines.pdf,我们可以在使用yield编程时使用select api让上下文切换。在带有async和await的python 3中,它仍然是唯一的方法吗?

小智 5

您正在询问有关 python 的 C 内部结构的问题。目前没有 C API 可以访问 asyncio 循环。如果您需要编写异步 C 代码,请参阅此答案:

python - 如何将 C 函数实现为可等待(协程)

当使用yield进行编程时,我们可以使用select api来让上下文切换。在带有async和await的python 3中,它仍然是唯一的方法吗?

您无需了解其内部原理即可使用它。如果您想了解有关在 C 中创建事件循环的各种方法的更多信息,请参阅此库:

https://github.com/aisk/libae

epoll、kqueue、select参见src中的代码。

另请注意,您可以使用此 python 模块替换 asyncio 事件循环。所以您也可以在这里了解更多信息。Uvloop的事件循环使用C库libuv。

https://github.com/MagicStack/uvloop

如果您对 C 代码有更多疑问,请将其添加为下面的评论,我可以填写更多详细信息。