纯 Python 可以实现真正的异步协程吗?
最近在看 greenlet
的源代码,发现 greenlet
用 c
写的,里面还有不少的汇编,这让我学习起来非常的困难。尤其是其中的汇编代码。
请问 Python
不借助 c
和 汇编难道实现不了真正的协程吗?
因为之前听说 yield
不是完整的协程
有哪些 demo
是纯 Python 实现的异步协程?我想学习一下
最近在自己用socket
、select
实现自己的协程异步HTTP
客户端和服务端
TIPS:我想问的是底层实现,比如 Python 的 asyncio 底层也是 c+内联汇编实现函数帧栈的无感知切换的吗?
参考连接:
为什么说python的yield关键字的支持也称不上完全的协程?
python-greenlet /greenlet
回答:
pythone有自己的异步库, https://docs.python.org/zh-cn...
同步和异步的io不通用.
回答:
- 你说的greenlet是py在3.4以前,基于yield所实现的协程,py本身不支持协程,基于c写了一个扩展库.
python3.4以后增加了anyncio,是py原生支持的协程,官方文档参考1楼
asyncio
的编程模型就是一个消息循环。我们从asyncio
模块中直接获取一个EventLoop
的引用,然后把需要执行的协程扔到EventLoop
中执行,就实现了异步IO。
回答:
好像,我知道了,协程可以分有栈和无栈两种。Python 中的 greenlet 是属于有栈的,所以需要汇编。Python 自带的 asyncio 是无栈的。
参考文章:
Python 的协程实现属于有栈还是无栈协程?
初识协程
以上是 纯 Python 可以实现真正的异步协程吗? 的全部内容, 来源链接: utcz.com/p/938277.html