mac example python wsgi nonblocking flask tornado

python - example - usando Flask y Tornado juntos?



tornado python git (2)

Soy un gran admirador de Flask , en parte porque es simple y en parte porque tiene muchas extensions . Sin embargo, Flask está destinado a ser utilizado en un entorno WSGI, y WSGI no es un no-bloqueo, por lo que (creo) no se escala tan bien como Tornado para ciertos tipos de aplicaciones.

Como cada uno tiene un despachador de URL que llamará a una función, y ambos usarán archivos de Python (en Django no ejecutas el archivo de Python pero sí en un matraz o un tornado), ¿tiene sentido tener dos partes separadas en tu sitio web? una parte ejecutando los trabajos sin bloqueo con Tornado, y la otra parte escrita con Flask?

Si esta es una buena idea, ¿cómo compartiría las cookies / sesiones entre Flask y Tornado? ¿Tendré problemas, ya que Flask usará su propio sistema y Tornado usará su propio sistema?


Creo que obtuve el 50% de la solución, las cookies aún no se han probado, pero ahora puedo cargar la aplicación Flask usando Tornado y mezclar Tornado + Flask juntos :)

El primero aquí es flasky.py el archivo donde está la aplicación del matraz:

from flask import Flask app = Flask(__name__) @app.route(''/flask'') def hello_world(): return ''This comes from Flask ^_^''

y luego el archivo cyclone.py que cargará la aplicación del matraz y el servidor tornado + una simple aplicación de tornado, espero que no haya un módulo llamado "ciclón" ^ _ ^

from tornado.wsgi import WSGIContainer from tornado.ioloop import IOLoop from tornado.web import FallbackHandler, RequestHandler, Application from flasky import app class MainHandler(RequestHandler): def get(self): self.write("This message comes from Tornado ^_^") tr = WSGIContainer(app) application = Application([ (r"/tornado", MainHandler), (r".*", FallbackHandler, dict(fallback=tr)), ]) if __name__ == "__main__": application.listen(8000) IOLoop.instance().start()

Espero que esto ayude a alguien que quiera mezclarlos :)


En base a 1 y 2 , la respuesta combinada y más corta es

from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop http_server = HTTPServer(WSGIContainer(app)) http_server.listen(8000) IOLoop.instance().start()

Tenga en cuenta la advertencia sobre el rendimiento que se ha mencionado en 2 , 3