gevent和龙卷风之间的差异

时间:2012-10-10 05:34:09

标签: wsgi tornado gevent

我知道tornadogevent都是异步python框架。

在阅读bottle documentation时,我发现gevent实际上并非异步,并且您可以创建数千个与同步工作的伪线程。

顺便说一句,在gevent中,你不能提前终止请求处理程序,你需要返回完整的响应,而在龙卷风中你可以。 (如果我错了,请纠正我)

有些人可以详细描述这些系统如何在内部工作,以及它们的不同之处。另外,WSGI如何使用这些系统的异步特性?这些框架是否符合WSGI,如果是,如何?

2 个答案:

答案 0 :(得分:24)

阅读:

http://en.wikipedia.org/wiki/Coroutines

http://en.wikipedia.org/wiki/Event-driven_architecture

http://en.wikipedia.org/wiki/Event-driven_programming

gevent包使用协同程序,Tornado是事件驱动的。

即使是被驱动的系统也不容易映射到WSGI,但是一个协程系统,因为它看起来像线程,可以支持WSGI,如果阻塞点可以修补以便在事物阻塞时切换协同程序。

答案 1 :(得分:21)

gevent和Tornado有点不同。 gevent更像Twisted - 一个异步网络框架,而Tornado是一个仅限Web的框架。

gevent的主要亮点在于它利用协同程序并使代码看起来像是在同步运行,但实际上大多数IO阻塞函数都是非阻塞函数并且返回对gevent主循环的控制。这对于IO绑定编程非常重要,因为它允许您编写高效的单线程代码,就像编写多线程代码一样,这需要更多的资源。

gevent还包括一个WSGI请求处理程序,因此它可以用于以独立方式处理HTTP请求,如Tornado。

Tornado是一个异步的Web框架,它依赖于程序员在Python中编写异步代码,这在Backend中通常是一种痛苦,因为没有多行匿名闭包或类,如JavaScript或Java。因此,使用Tornado编写好的代码真的很难。例如,使用阻塞库会变得很麻烦。

实际上两个框架的核心都是异步的,但结果代码看起来有点不同(更容易用gevent编程)。

你实际上可以一起使用Torando和gevent,但我还没有试过(还)。