如果我在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倍。
然而,这种方式并不灵活,因为serve_file添加到请求的头部(比如range头部和内容长度)不会在响应中返回--我必须自己来做。
有什么我可以做的使第一种方法更快吗?
发布于 2014-11-05 02:22:42
我以前也遇到过同样的问题,但据我所知只在Windows机器上。你在Windows上运行CherryPy吗?CherryPy 3.5.0中似乎有一个bug,它为静态文件返回了错误的Content-Length头部,这会导致浏览器闲置,等待更多不存在的字节。
我还没有详细研究过这个问题,但是您可能希望检查服务器发送的Content-Length头部,看看它是否与静态文件的实际大小匹配。临时解决方法可能是手动设置(或删除)“before_handler”挂钩中的Content-Length报头。
https://stackoverflow.com/questions/12081193
复制相似问题