Python 同时使用烧瓶和龙卷风?

Python 同时使用烧瓶和龙卷风?,python,wsgi,nonblocking,flask,tornado,Python,Wsgi,Nonblocking,Flask,Tornado,我是《烧瓶》的忠实粉丝,部分原因是它很简单,部分原因是它有很多优点。然而,Flask旨在用于WSGI环境,并且WSGI不是非阻塞的,因此(我相信)对于某些类型的应用,它的伸缩性不如龙卷风 由于每一个都有一个URL调度程序,它将调用一个函数,并且两者都将使用Python文件(在Django中,您不启动Python文件,但在flask或tornado中启动),那么将两个独立的部分放在您的网站上有意义吗?一部分用tornado运行非阻塞作业,另一部分用flask编写 如果这是一个好主意,您将如何在Fl

我是《烧瓶》的忠实粉丝,部分原因是它很简单,部分原因是它有很多优点。然而,Flask旨在用于WSGI环境,并且WSGI不是非阻塞的,因此(我相信)对于某些类型的应用,它的伸缩性不如龙卷风

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


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

我想我得到了50%的解决方案,Cookie尚未测试,但现在我可以使用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 ^_^'
然后是cyclone.py文件,该文件将加载flask应用程序和tornado服务器+一个简单的tornado应用程序,希望没有名为“cyclone”的模块^_^

希望这将有助于那些想要混合它们的人:)

基于和,组合的简短答案是

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

请考虑关于提到的表演的警告,

@ TimcNAMARA。我不知道为什么我会爱上烧瓶!当我开始写我的第一篇教程时,这个框架就起了作用!我用了2个月的时间来理解django的第一步,因为我认为django是python,python是运行一个文件并查看……而不是如何启动django项目;)我更新了您的问题-如果我没有完全理解,请告诉我:-)完美无瑕,谢谢:)现在它更专业了:您将如何在Tornado中添加异步方法?你能在烧瓶上使用异步路由吗?我知道烧瓶是一个微框架。但是Tornado不是一个微观的框架吗?它有一个健壮的http服务器。假设您不需要担心WSGI“容器”的潜在更换,为什么不开发Tornado提供的功能呢?Flask的扩展功能很好,所有功能都在Flask上扩展,因此无需重新发明轮子@Merlin我认为这不是一个简单的方法,Flask使用WSGI并且WSGI不是异步的。这真的可行吗?你最终使用了这个,还是仅仅使用了Tornado?@Abdelouahapp,虽然Flask使用WSGI,WSGI不是异步的,但是Tornado可以接受异步连接,然后我们每个请求都可以在不同的线程中运行(我不确定),然后我们可以使用异步tornado,而不是像ApachePre-fork模块一样使用带有同步工作者类的Gunicorn。最好单独使用tornado,而不是结合使用flask和tornado。
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()