【问题标题】:how to implement a low-level async IO function如何实现低级异步 IO 功能
【发布时间】:2019-05-25 22:16:06
【问题描述】:

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

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

【问题讨论】:

  • 看看同一作者的newer lecture。虽然它仍然基于生成器,但它使用yield from 构造作为构建块,在功能上等同于await(实际上,Python 2.5+ awaityield from 的一个瘦包装器)。跨度>

标签: python python-3.x asynchronous async-await python-asyncio


【解决方案1】:

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

python - how to implement a C-function as awaitable (coroutine)

我们可以使用 select api 在使用 yield 编程时让上下文切换。在带有异步和等待的python 3中,它仍然是唯一的方法吗?

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

https://github.com/aisk/libae

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

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

https://github.com/MagicStack/uvloop

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

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2018-09-04
    • 2018-01-25
    • 2020-11-07
    • 2013-09-12
    • 2016-11-29
    相关资源
    最近更新 更多