использовать Flask и Tornado вместе? - PullRequest
54 голосов
/ 16 ноября 2011

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

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

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

Ответы [ 2 ]

87 голосов
/ 23 ноября 2011

я думаю, что я получил 50% раствора, куки еще не тестировались, но теперь я могу загрузить приложение 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()

надеюсь, что это поможет кому-то, кто хочет смешать их:)

4 голосов
/ 30 декабря 2015

На основе 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

...