如何使用 Tornado 运行 Flask 应用程序
How to run Flask app with Tornado
我想要 运行 一个用 Flask 和 Tornado 编写的简单应用程序。我该怎么做呢?我想使用 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()
用于描述如何执行此操作的 Flask 文档,但由于下面的性能说明,它已被删除。你不需要 Tornado 来为你的 Flask 应用程序提供服务,除非你所有的异步代码都已经用 Tornado 编写了。
Tornado docs about WSGI也描述了这一点。他们还包括一个很大的警告,这可能比使用专用的 WSGI 应用程序服务器(如 uWSGI、Gunicorn 或 mod_wsgi.
性能低
WSGI is a synchronous interface, while Tornado’s concurrency model is based on single-threaded asynchronous execution. This means that running a WSGI app with Tornado’s WSGIContainer
is less scalable than running the same app in a multi-threaded WSGI server like gunicorn
or uwsgi
. Use WSGIContainer
only when there are benefits to combining Tornado and WSGI in the same process that outweigh the reduced scalability.
例如,改用 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()
我想要 运行 一个用 Flask 和 Tornado 编写的简单应用程序。我该怎么做呢?我想使用 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()
用于描述如何执行此操作的 Flask 文档,但由于下面的性能说明,它已被删除。你不需要 Tornado 来为你的 Flask 应用程序提供服务,除非你所有的异步代码都已经用 Tornado 编写了。
Tornado docs about WSGI也描述了这一点。他们还包括一个很大的警告,这可能比使用专用的 WSGI 应用程序服务器(如 uWSGI、Gunicorn 或 mod_wsgi.
性能低WSGI is a synchronous interface, while Tornado’s concurrency model is based on single-threaded asynchronous execution. This means that running a WSGI app with Tornado’s
WSGIContainer
is less scalable than running the same app in a multi-threaded WSGI server likegunicorn
oruwsgi
. UseWSGIContainer
only when there are benefits to combining Tornado and WSGI in the same process that outweigh the reduced scalability.
例如,改用 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()