龙卷风和django处理顺序

时间:2015-04-21 11:43:47

标签: django asynchronous websocket tornado

我们正在龙卷风上使用django开发一个项目。

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

当我们按上述方式运行项目时,我们会解决以下问题。

  1. 当请求开始时(例如向屏幕显示10K记录),所有其他请求都在等待第一个请求完成。
  2. 正在Web Socket上运行的请求正在等待第一个请求的完成。
  3. 当用户启动第一个请求时,所有其他用户都在等待第一个请求的完成。
  4. 示例项目是here。我们如何解决这个问题..

    你知道吗?

    ...谢谢

1 个答案:

答案 0 :(得分:0)

这是WSGIContainer的限制:http://www.tornadoweb.org/en/stable/wsgi.html#tornado.wsgi.WSGIContainer

  

警告

     

WSGI是一个同步接口,而Tornado的并发模型是   基于单线程异步执行。这意味着   使用Tornado的WSGIContainer运行WSGI应用程序的可扩展性低于   在多线程WSGI服务器中运行相同的应用程序,如gunicorn或   uwsgi。仅在有组合优势时才使用WSGIContainer   龙卷风和WSGI在相同的过程中超过了减少的数量   可扩展性。

你需要让你的Django应用程序足够快,你不介意等待它,或者在通过网络进行通信的两个独立进程中运行Django和Tornado。就个人而言,我只会在WSGIContainer中运行Django,作为将所有内容转换为Tornado的过渡策略的一部分;如果Django是你的长期战略的一部分,那么我建议你使用不同的流程。