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,但我还没有尝试过(还).