Подтвердить что ты не робот

Используя Flask и Tornado вместе?

Я большой поклонник Flask - отчасти потому, что он прост и отчасти потому, что имеет много extensions. Тем не менее, Flask предназначен для использования в среде WSGI, а WSGI не является блокирующим, поэтому (я считаю) он не масштабируется, а Tornado для определенных видов приложений.

Поскольку каждый из них имеет диспетчер URL-адресов, который будет вызывать функцию, и оба будут использовать файлы Python (в Django вы не запускаете файл python, а в фляге или торнадо), имеет ли смысл иметь две отдельные части для ваш сайт - одна часть работает с неблокирующими работами с Tornado, а другая часть написана с помощью Flask?

Если это хорошая идея, как бы вы делились куками/сеансами между Flask и Tornado? Будут ли я сталкиваться с проблемами, поскольку Flask будет использовать ее собственную систему, а Tornado будет использовать свою собственную систему?

4b9b3361

Ответ 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