【发布时间】:2012-10-21 06:25:57
【问题描述】:
据我所知,Tornado 是一个服务器和一个框架。在我看来,一起使用 Flask 和 Tornado 就像添加另一个抽象层(更多开销)。人们为什么要同时使用 Flask 和 Tornado,有什么好处?
【问题讨论】:
-
看看这个 ;) github.com/twisted/klein
标签: python web webserver flask tornado
据我所知,Tornado 是一个服务器和一个框架。在我看来,一起使用 Flask 和 Tornado 就像添加另一个抽象层(更多开销)。人们为什么要同时使用 Flask 和 Tornado,有什么好处?
【问题讨论】:
标签: python web webserver flask tornado
根据this question,这是因为 Flask 是阻塞的,而 Tornado 是非阻塞的。
如果使用Tornado as a WSGI server and Flask for url routing + templates,则不应该有任何开销。使用这种方法,您不会使用 Flask 的 Web 服务器,因此实际上并没有额外的抽象层。
但是,如果有人将 Flask 仅用于模板,他们可以将 Tornado 与 Jinja2 一起使用,这是 Flask 使用的模板引擎。
【讨论】:
我一直认为将 Flask 和 Tornado 一起使用是愚蠢的,但它确实是有道理的。但它增加了复杂性;我的偏好是只使用 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 只是充当服务器。
也可以使用 Tornado 处理一些请求(例如,websockets,它不能很好地与 WSGI 配合使用),并且仍然可以在 Flask 中完成大部分工作。理论上,您将获得 Flask 的简单性和 Tornado 的异步性能。
【讨论】:
您将使用 Tornado,而不是使用 Apache 作为您的服务器(由于 WSGI 的同步特性,当然作为阻塞服务器)。
【讨论】:
将每一种都用于更擅长的领域,但要考虑到混合使用并不总能获得您想要的性能提升。
这个基准测试,https://gist.github.com/andreif/6088558,例如,质疑哪种框架组合更快,您必须使示例适应您的主要用例。在这个例子中,flask+tornado 没有提供预期的性能提升。
【讨论】: