我有一个使用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应用程序吗?
答案 0 :(得分:2)
要使用Tornado的异步功能(包括websockets),您必须使用Tornado的HTTPServer而不是在WSGI容器中运行它。然后,您可以使用tornado.web.WSGIContainer在Tornado中运行Pyramid,完全替换当前的WSGI容器。
但是,Tornado的WSGIContainer是单线程的,对于使用WSGI框架构建的大多数应用程序来说,这不是一个好的选择。除非你强烈需要在同一个过程中运行Pyramid和Tornado,否则我建议将它们分开,在Pyramid应用程序旁边运行纯Tornado websocket过程。