gevent和龙卷风之间的差异

tre*_*der 12 wsgi tornado gevent

据我所知,这两个tornadogevent是异步的Python框架.

在阅读瓶子文档时,我发现gevent实际上并不是异步的,你可以创建数千个伪同步的伪线程.

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

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

Gra*_*ton 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.


Ron*_*ter 22

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

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

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

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

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

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

  • "后端的痛苦" - 喜欢它! (3认同)