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