tornado 和 django 处理顺序
Posted
技术标签:
【中文标题】tornado 和 django 处理顺序【英文标题】:tornado and django proccesing order 【发布时间】:2015-04-21 11:43:46 【问题描述】:我们正在使用 django on tornado 开发一个项目。
def main():
tornado.options.parse_command_line()
wsgi_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler())
application = Application([(r'/websocket/', planet_socket.WsDate),
('.*', FallbackHandler, dict(fallback=wsgi_app)),
],
**settings)
print options.port
server = tornado.httpserver.HTTPServer(application)
server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
if __name__ == '__main__':
main()
当我们运行上述项目时,我们认为问题如下。
-
当一个请求开始时(例如在屏幕上显示 10K 条记录),所有其他请求都在等待,直到第一个请求完成。
在 Web Socket 上运行的请求正在等待第一个请求完成。
当用户启动第一个请求时,所有其他用户都在等待第一个请求完成。
示例项目是here。我们如何解决这个问题..
你有什么想法吗?
谢谢...
【问题讨论】:
【参考方案1】:这是 WSGIContainer 的一个限制:http://www.tornadoweb.org/en/stable/wsgi.html#tornado.wsgi.WSGIContainer
警告
WSGI 是同步接口,而 Tornado 的并发模型是 基于单线程异步执行。这意味着 使用 Tornado 的 WSGIContainer 运行 WSGI 应用程序的可扩展性不如 在多线程 WSGI 服务器(如 gunicorn 或 uwsgi。仅当组合有好处时才使用 WSGIContainer Tornado 和 WSGI 在同一个进程中的作用大于减少 可扩展性。
您需要使您的 Django 应用程序足够快以至于您不介意等待它,或者在通过网络通信的两个独立进程中运行 Django 和 Tornado。就个人而言,我只会在 WSGIContainer 中运行 Django,作为将所有内容都转换为 Tornado-only 的过渡策略的一部分;如果 Django 是您长期战略的一部分,那么我建议使用单独的进程。
【讨论】:
我们尝试了单独的进程,但我们无法在 tornado 中验证登录 django 的用户。那么当我们分开这个过程时,我们如何进行身份验证,你能举个例子吗?以上是关于tornado 和 django 处理顺序的主要内容,如果未能解决你的问题,请参考以下文章
聊天应用程序:将 Django 与 sockjs-tornado 和 redis 一起使用
tornado内置接口调用顺序initializeprepare...