【问题标题】:How to run Flask app with Tornado如何使用 Tornado 运行 Flask 应用程序
【发布时间】:2015-08-14 08:20:10
【问题描述】:

我想用 Tornado 运行一个用 Flask 编写的简单应用程序。我该怎么做呢?我想使用 Python 2.7 和最新的 Tornado 版本 (4.2)。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

【问题讨论】:

    标签: python flask tornado


    【解决方案1】:

    Flask 文档用于描述如何执行此操作,但由于下面的性能说明,它已被删除。你不需要 Tornado 来为你的 Flask 应用程序提供服务,除非你所有的异步代码都已经用 Tornado 编写了。

    Tornado docs about WSGI 也描述了这一点。它们还包含一个很大的警告,即这可能不如使用专用 WSGI 应用程序服务器(如 uWSGI、Gunicorn 或 mod_wsgi)的性能。

    WSGI是一个同步接口,而Tornado的并发模型是基于单线程异步执行。这意味着使用 Tornado 的 WSGIContainer 运行 WSGI 应用程序可伸缩性比在多线程 WSGI 服务器(如 gunicornuwsgi)中运行相同的应用程序。仅当在同一进程中组合 Tornado 和 WSGI 的好处大于降低的可伸缩性时,才使用WSGIContainer

    例如,改用 Gunicorn:

    gunicorn -w 4 app:app
    

    毕竟,如果你真的,真的还是想使用 Tornado,你可以使用文档中描述的模式:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2012-04-14
      • 2022-01-18
      • 2015-06-16
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多