¿Por qué usar Tornado y Frasco juntos?

Por lo que puedo decir, Tornado es un servidor y un framework en uno. Me parece que usar Flask y Tornado juntos es como agregar otra capa de abstracción (más sobrecarga). ¿Por qué la gente usa Flask y Tornado juntos, cuáles son las ventajas?

Según esta pregunta , es porque Flask está bloqueando y Tornado no está bloqueando.

Si uno usa Tornado como servidor WSGI y Flask para enrutamiento de url + plantillas, no debería haber ninguna sobrecarga. Con este enfoque, no está utilizando el servidor web de Flask, por lo que realmente no hay una capa extra de abstracción.

Sin embargo, si uno está usando Flask solo para las plantillas, podría usar Tornado con Jinja2, que es el motor de plantillas que usa Flask.

Siempre pensé que usar Flask y Tornado juntos era estúpido, pero en realidad tiene sentido. Sin embargo, agrega complejidad; mi preferencia sería solo usar Tornado, pero si está conectado a Flask, entonces esta configuración funciona.

El flask es (al parecer) muy agradable de usar y más simple que el Tornado. Sin embargo, Flask requiere un servidor WSGI para la producción (o FCGI, pero eso es más complicado). Tornado es bastante simple de configurar como un servidor WSGI:

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

En esta situación, el desarrollador solo necesita preocuparse por la aplicación Flask. Tornado simplemente actúa como un servidor.

También es posible manejar algunas solicitudes (por ejemplo, websockets, que no funcionan bien con WSGI) usando Tornado, y aún así hacer la mayoría de su trabajo en Flask. En teoría, obtendrá la simplicidad de Flask con el rendimiento asíncrono de Tornado.

En lugar de usar Apache como su servidor, usará Tornado (por supuesto, como servidor de locking debido a la naturaleza sincrónica de WSGI).