Python可以在等待asyncio.sleep和aiohttp函数时切换上下文。 python最终如何知道何时需要切换上下文?如果我想实现自己的IO功能,我们需要调用哪些API?
基于http://www.dabeaz.com/coroutines/Coroutines.pdf,当使用yield编程时,我们可以使用select api来使上下文切换。在具有异步和等待功能的python 3中,它仍然是唯一的方法吗?
答案 0 :(得分:3)
您正在询问有关python C内部的问题。当前没有C API可以访问asyncio循环。如果您需要编写异步C代码,请参见以下答案:
python - how to implement a C-function as awaitable (coroutine)
在使用yield进行编程时,我们可以使用select api来使上下文切换。在具有异步和等待功能的python 3中,它仍然是唯一的方法吗?
您不需要知道内部使用它。如果您想了解有关在C中创建事件循环的各种方式的更多信息,请参见以下库:
请参阅src中的代码以了解epoll,kqueue和选择。
还请注意,您可以使用此python模块替换asyncio事件循环。因此,您也可以在此处了解更多信息。 Uvloop的事件循环使用C库libuv。
https://github.com/MagicStack/uvloop
如果您对C代码有更多疑问,请将其添加为下面的注释,我可以填写更多详细信息。