如何使用Tornado运行Flask应用程序

6

我想运行一个用 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()
1个回答

17

Flask文档曾经介绍过如何实现这一点,但由于下面的性能注意事项已被删除。除非您的所有异步代码都已经用Tornado编写,否则您不需要使用Tornado来为您的Flask应用提供服务。

Tornado关于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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接