一起使用Flask和Tornado?

Abd*_*hab 54 python wsgi tornado nonblocking flask

我是Flask的忠实粉丝- 部分原因是因为它很简单,部分原因是因为它有很多扩展.但是,Flask意味着在WSGI环境中使用,而WSGI不是非阻塞的,所以(我相信)它不像某些类型的应用程序那样扩展到Tornado.

由于每个人都有一个URL调度程序,它将调用一个函数,并且两个都将使用Python文件(在Django中你不启动python文件,但是你在烧瓶或龙卷风中)你是否有意义在你的网站上有两个独立的部分 - 一部分用Tornado运行非阻塞作业,另一部分用Flask编写?

如果这是一个好主意,您将如何在Flask和Tornado之间共享cookie /会话?我会遇到问题,因为Flask将使用它自己的系统,而Tornado将使用自己的系统吗?

Abd*_*hab 87

我认为我有50%的解决方案,饼干尚未测试,但现在我可以使用Tornado加载Flask应用程序,并将Tornado + Flask混合在一起:)

首先这里是flasky.py烧瓶应用程序所在的文件:

from flask import Flask
app = Flask(__name__)

@app.route('/flask')
def hello_world():
  return 'This comes from Flask ^_^'
Run Code Online (Sandbox Code Playgroud)

然后是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()
Run Code Online (Sandbox Code Playgroud)

希望这会帮助想要混合它们的人:)

  • 如何在Tornado中添加异步方法?你能在烧瓶路线上使用async吗? (5认同)
  • 这真的可行吗?你最终使用这个,还是只使用龙卷风? (4认同)
  • 我知道Flask是一个微框架.但是Tornado并不是一个微框架,但它有一个强大的http服务器.假设您不需要关注WSGI"容器"的潜在交换,为什么不开发Tornado提供的产品呢? (2认同)