为什么要一起使用Tornado和Flask?

时间:2012-10-31 17:59:44

标签: python web webserver flask tornado

据我所知,Tornado是一个服务器和一个框架。在我看来,使用Flask和Tornado就像添加另一个抽象层(更多的开销)。为什么人们一起使用Flask和Tornado,有什么优势?

4 个答案:

答案 0 :(得分:50)

根据this question,这是因为Flask阻塞而且Tornado是非阻塞的。

如果使用Tornado as a WSGI server and Flask for url routing + templates,则不应有任何开销。使用这种方法,您不使用Flask的Web服务器,因此实际上没有额外的抽象层。

但是,如果只使用Flask作为模板,他们可以将Tornado与Jinja2一起使用,这是Flask使用的模板引擎。

答案 1 :(得分:15)

我一直以为使用Flask&龙卷风在一起是愚蠢的,但它确实有意义。但它增加了复杂性;我的偏好是只使用Tornado,但是如果你附加到Flask,那么这个设置就可以了。

Flask(据说)非常好用,比Tornado简单。但是,Flask requires a WSGI server for production(或FCGI,但这更复杂)。将Tornado设置为WSGI服务器非常简单:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()

在这种情况下,开发人员只需要担心Flask应用程序。龙卷风只是一个服务器。

使用Tornado也可以处理一些请求(例如,不能与WSGI一起使用的websockets),并且仍然可以在Flask中完成大部分工作。从理论上讲,你可以通过Tornado的异步性能获得Flask的简单性。

答案 2 :(得分:2)

而不是使用Apache作为您的服务器,您将使用Tornado(当然由于WSGI的同步特性而阻塞服务器)。

答案 3 :(得分:0)

使用每个选项都有更好的表现,但要考虑到混合并不总是能获得您想要的性能提升。

例如,该基准测试https://gist.github.com/andreif/6088558质疑哪种框架组合更快,您必须使该示例适应您的主要用例。在此示例中,flask + tornado无法实现预期的性能提升。