我是 Flask 的忠实粉丝 - 部分原因是因为它很简单,部分原因是因为它有很多extensions。但是,Flask意味着在WSGI环境中使用,而WSGI不是非阻塞的,因此(我相信)它对于某些类型的应用程序并不像 Tornado 那样扩展。 / p>
因为每个人都有一个调用函数的URL调度程序,并且两者都将使用Python文件(在Django中你没有启动python文件,但是你在烧瓶或者龙卷风中)这样做有两个单独的部分是有意义的吗?你的网站 - 一部分用Tornado运行非阻塞作业,另一部分用Flask编写?
如果这是一个好主意,您将如何在Flask和Tornado之间共享Cookie /会话?我是否会遇到问题,因为Flask将使用它自己的系统,而Tornado将使用自己的系统?
答案 0 :(得分: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 ^_^'
然后 cyclone.py 将加载烧瓶应用程序和龙卷风服务器的文件+一个简单的龙卷风应用程序,希望没有名为“cyclone”的模块^ _ ^
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()
希望这会帮助那些想要混合它们的人:)
答案 1 :(得分:4)
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()
上提到的有关效果的警告