Используя Flask и Tornado вместе?
Я большой поклонник Flask - отчасти потому, что он прост и отчасти потому, что имеет много extensions. Тем не менее, Flask предназначен для использования в среде WSGI, а WSGI не является блокирующим, поэтому (я считаю) он не масштабируется, а Tornado для определенных видов приложений.
Поскольку каждый из них имеет диспетчер URL-адресов, который будет вызывать функцию, и оба будут использовать файлы Python (в Django вы не запускаете файл python, а в фляге или торнадо), имеет ли смысл иметь две отдельные части для ваш сайт - одна часть работает с неблокирующими работами с Tornado, а другая часть написана с помощью Flask?
Если это хорошая идея, как бы вы делились куками/сеансами между Flask и Tornado? Будут ли я сталкиваться с проблемами, поскольку Flask будет использовать ее собственную систему, а Tornado будет использовать свою собственную систему?
Ответы
Ответ 1
Я думаю, что у меня есть 50% решения, cookie еще не проверен, но теперь я могу загрузить приложение Flask с помощью Tornado и смешать Tornado + Flask вместе:)
сначала здесь flasky.py файл, в котором находится фляга:
from flask import Flask
app = Flask(__name__)
@app.route('/flask')
def hello_world():
return 'This comes from Flask ^_^'
а затем cyclone.py файл, который будет загружать приложение для фляги и сервер торнадо + простое приложение для торнадо, надеюсь, что нет модуля под названием "циклон" ^ _ ^
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()
надеюсь, что это поможет кому-то, кто хочет их смешать:)
Ответ 2
На основе 1 и 2 комбинированный и более короткий ответ
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()
Обратите внимание на предупреждение о производительности, о котором говорилось в 2, 3