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

时间:2015-05-31 23:53:48

标签: python flask tornado

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

1 个答案:

答案 0 :(得分:12)

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

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

  

WSGI是一个同步接口,而Tornado的并发模型基于单线程异步执行。这意味着在Tornado的WSGIContainer中运行WSGI应用程序的可伸缩性比在gunicornuwsgi等多线程WSGI服务器中运行相同的应用程序。只有在将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()