Python 使用cherrypy压缩流式输出

Python 使用cherrypy压缩流式输出,python,ajax,gzip,cherrypy,http-streaming,Python,Ajax,Gzip,Cherrypy,Http Streaming,我使用cherrypy作为web服务器,它能够对某些方法的输出进行流式处理。 服务器使用yield发送数据行,客户端使用onprogress事件的$.ajax方法 但是启用cherrypy的'tools.gzip'配置会导致客户端无法缓存输出。事实上,除非服务器方法完全完成,否则不会调用客户端的onprogress事件。cherrypy压缩工具似乎无法在流模式下压缩输出(它只能在完全获取输出时压缩输出) 现在我的第一个问题是如何解决这个问题。如果无法修复,我的第二个问题是如何为特定方法禁用che

我使用cherrypy作为web服务器,它能够对某些方法的输出进行流式处理。 服务器使用
yield
发送数据行,客户端使用
onprogress
事件的
$.ajax
方法
但是启用cherrypy的'tools.gzip'配置会导致客户端无法缓存输出。事实上,除非服务器方法完全完成,否则不会调用客户端的
onprogress
事件。cherrypy压缩工具似乎无法在流模式下压缩输出(它只能在完全获取输出时压缩输出)

现在我的第一个问题是如何解决这个问题。如果无法修复,我的第二个问题是如何为特定方法禁用cherrypy压缩。

您必须启用请求的流功能

设置以下配置:

{'response.stream':True}

gzip工具检查当前请求并查找
并相应地响应


有关详细信息:

已使用
response.stream
配置对请求进行流式传输。问题在于流媒体和gzip功能的结合。你说得对。显然,gzip工具不支持流式传输。明天早上我将进一步了解细节。在对gzip工具进行了一些检查之后,它似乎确实应该与流媒体一起工作。它返回一个生成器。尝试启用调试,并查看日志中是否有有用的内容
tools.gzip.debug:True
!我检查源代码。在位于
encoding.py
文件的
compress
方法中,有一个
for
循环,它使用
zobj
逐行压缩身体,并产生每一行压缩的结果。循环完成后,将生成
zobj.flush()
。跟踪代码时,我发现
for
返回一个空字符串!但是
for
的收益率会立即返回整个数据!!换句话说,实际上,您提到的生成器没有按预期工作。