python 中协程 asyncio 是如何实现异步IO的?

gevent 有 gevent.monkey.patch_all() 会替换调内置的io方法
比如下面这段 会监控可读的 socket 文件描述符:

gevent.hub.get_hub().loop.io(on_state_changed_fd, gevent.core.READ)

若有读事件,置 gevent.event.Event() 实例内部标志为 True,然后阻塞的io 再下次循环时就可以读了。

那么 python3.7 中 asyncio 是如何处理阻塞io的。

...
aiohttp ?还有什么其他已经实现了支持协程的库

  • aiomysql
  • aiohttp

小弟 万分感谢

阅读 3.6k
2 个回答

泛泛而论,在“事件循环”调度“协程”的大概念下,他们异曲同工, 但在协程的实现上,它们走了两条不同的道路。

个人的看法,asyncio 可能是目前标准库里最复杂的一块,三言两语讲来,听者更糊涂,不如找 "Fluent Python",
从生成器,yield from, async/await, future, task, coroutine 这些一路深入理解下来。再亲自花事件读读源码。

推荐问题
宣传栏