如何使用金字塔与龙卷风

时间:2015-04-07 16:50:21

标签: python tornado pyramid

我有一个使用Pyramid web框架编写的应用程序。但我需要WebSockets的异步功能。这是在Tornado中实现的功能。我试着像龙卷风那样使用金字塔:

app = tornado.web.Application([
    (r'/', IndexHandler),
])

def build_tornado_app():
    app.listen(6544)
    tornado.ioloop.IOLoop.instance().start()

# This function returns a Pyramid WSGI application
def main(global_config, **settings):
    build_tornado_app()
    # ... config routes, database session etc.
    config.scan()
    return config.make_wsgi_app()

不幸的是,启动Tornado应用程序(使用start()函数)会阻止执行链。

我可以在不阻止金字塔执行链的情况下启动Tornado应用程序吗?

1 个答案:

答案 0 :(得分:2)

要使用Tornado的异步功能(包括websockets),您必须使用Tornado的HTTPServer而不是在WSGI容器中运行它。然后,您可以使用tornado.web.WSGIContainer在Tornado中运行Pyramid,完全替换当前的WSGI容器。

但是,Tornado的WSGIContainer是单线程的,对于使用WSGI框架构建的大多数应用程序来说,这不是一个好的选择。除非你强烈需要在同一个过程中运行Pyramid和Tornado,否则我建议将它们分开,在Pyramid应用程序旁边运行纯Tornado websocket过程。