Flask文档用于描述如何执行此操作,但是由于以下性能说明而已被删除。除非所有异步代码都已经用Tornado编写,否则您不需要Tornado来提供Flask应用程序。
关于WSGI的Tornado文档也对此进行了描述。它们还包括一个重要警告,即与使用专用WSGI应用程序服务器(如uWSGI,Gunicorn或mod_wsgi)相比,此方法的性能可能较低。
WSGI是一个 同步 接口,而Tornado的并发模型基于单线程异步执行。这意味着运行与龙卷风的一个WSGI应用WSGIContainer
是少可扩展性 比在多线程WSGI服务器一样运行相同的应用程序gunicorn
或uwsgi
。WSGIContainer
仅在以相同的过程合并Tornado和WSGI的好处超过了降低的可伸缩性时才使用。
例如,改用Gunicorn:
gunicorn -w 4 app:app
毕竟,如果您确实真的想使用Tornado,则可以使用docs中描述的模式:
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()