纯 Python 可以实现真正的异步协程吗?

纯 Python 可以实现真正的异步协程吗?

最近在看 greenlet 的源代码,发现 greenletc 写的,里面还有不少的汇编,这让我学习起来非常的困难。尤其是其中的汇编代码。

请问 Python 不借助 c 和 汇编难道实现不了真正的协程吗?

因为之前听说 yield 不是完整的协程

有哪些 demo 是纯 Python 实现的异步协程?我想学习一下

最近在自己用 socketselect 实现自己的协程异步 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

回到顶部