python – 为什么CherryPy静态文件下载如此之慢?

如果我在CherryPy中挂载一个静态目录,如下所示:

wwwroot_config = { '/': 
                      { 'tools.staticdir.on': True, 
                        'tools.staticdir.dir': '/path/to/dir' } }

cherrypy.tree.mount(root, '/', config = wwwroot_config)

从该目录下载文件非常慢.

但是,如果我创建自己的WSGI应用程序…

self.wsgi_server = wsgiserver.CherryPyWSGIServer((self.bindaddress, self.port), self.download_file, numthreads = 1)

使用self.download_file,基本上:

return serve_file(theFile, "application/x-download", "attachment", os.path.basename(theFile), debug = True)

我的速度提高了4-5倍.

但是,这种方式并不灵活,因为request_file添加到请求的标头(例如范围标头和内容长度)不会在响应中返回 – 我必须自己完成.

我能做些什么来让第一路更快?

解决方法:

我之前遇到过同样的问题,但我只记得在Windows机器上.你在Windows上运行CherryPy吗? CherryPy 3.5.0中似乎存在一个错误,它为静态文件返回错误的Content-Length标头,导致浏览器空闲等待更多不存在的字节.

我没有详细研究过这个问题,但您可能需要检查服务器发送的Content-Length标头,看它是否与静态文件的实际大小相匹配.临时解决方法可能是在’before_handler’挂钩中手动设置(或删除)Content-Length标头.

上一篇:Python做一个简单的web服务器,外接一个支持wsgi协议框架显示动态数据


下一篇:python – mod_wsgi和uwsgi有什么区别?