首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gevent的libev和Twisted的反应堆

Gevent的libev和Twisted的反应堆
EN

Stack Overflow用户
提问于 2016-06-04 10:52:26
回答 1查看 345关注 0票数 2

我试图弄清楚Gevent与python中的其他异步框架(如Twisted )是如何工作的。

Gevent和Twisted之间的关键区别在于Gevent使用了用于隐式行为和同步编程模型的标准库补丁,而Twisted则需要特定的库和显式行为的回调。Gevent中的事件循环是libev/libevent,用C编写,Twisted中的事件循环是用python编写的反应器。

libev/libevent有什么特别的地方允许这种隐式行为吗?为什么不使用用Python编写的事件循环呢?相反,为什么不使用libev/libevent来扭曲?有什么特别的原因吗?也许这只是一个设计上的选择,可以走任何一条路.

理论上,Gevent的libev能否被另一个用python编写的事件循环所替代,就像Twisted的反应堆一样?Twisted的反应堆能用libev代替吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-08 11:24:24

简短答案:Twisted是一个网络框架。Gevent试图充当一个,而不要求程序员改变他的编程方式。这就是他们的焦点..。更不要说这是如何在引擎盖下实现的。

长答案

所有异步库(Gevent、Asyncio等)工作方式大致相同:

  1. 让主循环在单个线程上无休止地运行。
  2. 当事件发生时,主循环会捕获它。
  3. 主循环根据不同的规则(调度)决定是否应该继续检查事件或临时切换,并将对事件的任何订阅者功能给予控制。

greenlet是一个不同的库。它非常简单,因为它只是改变了Python代码的运行顺序,并允许您在函数之间来回跳。Gevent在幕后使用它来实现它的异步特性。

asyncio随Python3而来,就像gevent一样。最大的区别是接口再次出现。它要求程序员用async标记函数,并允许他显式地等待await主循环中订阅的函数。

Gevent就像异步。但是,它不是关键字,而是在适当的地方对现有代码进行修补。它使用引擎盖下的greenlet在主循环和订阅函数之间切换,使所有功能都能无缝地工作。

如前所述,扭曲感觉更像是一个框架,而不是一个库。它要求程序员遵循非常具体的方法来实现并发。尽管如此,它在引擎盖下还有一个名为reactor的主循环,就像其他所有东西一样。

回到你最初的问题:理论上,你可以用任何回路(包括gevent)替换反应堆。但那会使目的落空。由于优化的原因,Twisted的团队可能决定使用他们自己版本的主循环。所有这些库在它们的主循环中使用不同的调度来满足它们的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37629312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档