首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >同时使用Flask和Tornado?

同时使用Flask和Tornado?
EN

Stack Overflow用户
提问于 2011-11-16 05:06:52
回答 2查看 40K关注 0票数 57

我是Flask的铁杆粉丝--部分原因是它很简单,另一部分原因是它有很多extensions。然而,Flask是为了在WSGI环境中使用的,而WSGI不是一个非阻塞的,所以(我相信)对于某些类型的应用程序,它的伸缩性不如Tornado

由于每一个都有一个URL分派器,它将调用一个函数,并且两者都将使用Python文件(在Django中,您不会启动python文件,但在Flask或Tornado中,您可以启动python文件),那么在您的网站上有两个独立的部分-一个部分运行tornado的非阻塞作业,另一部分使用flask编写-有意义吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 02:44:42

我想我得到了50%的解决方案,cookies还没有测试,但现在我可以使用Tornado加载Flask应用程序,并将Tornado + Flask混合在一起:)

首先是flasky.py,即flask应用程序所在的文件:

from flask import Flask
app = Flask(__name__)

@app.route('/flask')
def hello_world():
  return 'This comes from Flask ^_^'

然后旋风加载flask应用程序和tornado服务器的文件+一个简单的tornado应用程序,希望没有名为“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()

希望这篇文章能帮助那些想把它们混合在一起的人:)

票数 91
EN

Stack Overflow用户

发布于 2015-12-30 10:01:05

基于12,更简短的组合答案是

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()

请考虑在23上提到的有关性能的警告

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8143141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档