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

3k-*_*3k- 35 python webserver tornado flask web

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

Nat*_*usa 52

根据这个问题,这是因为Flask阻塞而且Tornado是无阻塞的.

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

但是,如果只使用Flask作为模板,他们可以使用Tornado和Jinja2,这是Flask使用的模板引擎.


Col*_*ean 17

我一直认为使用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()
Run Code Online (Sandbox Code Playgroud)

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

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

  • 除非我弄错了,否则在Flask应用程序中阻止活动仍会破坏并挂起Tornado反应堆,对吧? (3认同)
  • 是的,烧瓶会堵塞.但是,如果您在不同的服务器下运行它,则不会改变. (2认同)
  • 我完全放弃了Flask和UWSGI,只使用Mako模板.使用Mako需要大约30行代码,所以现在我有路由,处理程序和模板(这几乎就是框架).我的应用程序由supervisord管理,它完成并运行良好,没有Flask的空间. (2认同)