43

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

4

4 回答 4

63

根据这个问题,这是因为 Flask 是阻塞的,而 Tornado 是非阻塞的。

如果使用Tornado 作为 WSGI 服务器,使用 Flask 作为 url 路由 + 模板,则不应该有任何开销。使用这种方法,您不会使用 Flask 的 Web 服务器,因此实际上并没有额外的抽象层。

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

于 2012-10-31T18:18:07.853 回答
23

我一直认为将 Flask 和 Tornado 一起使用是愚蠢的,但它确实是有道理的。但它增加了复杂性;我的偏好是只使用 Tornado,但如果你连接到 Flask,那么这个设置就可以了。

Flask(据报道)非常好用,而且比 Tornado 更简单。然而,Flask 需要一个用于生产的 WSGI 服务器(或 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 的异步性能。

于 2012-11-01T00:09:24.573 回答
2

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

于 2012-11-04T14:00:21.537 回答
0

将每一种都用于更擅长的领域,但要考虑到混合并不总能获得您正在寻找的性能提升。

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

于 2019-05-28T07:23:58.043 回答