Stream cherrypy为多个请求/每个连接提供服务

Stream cherrypy为多个请求/每个连接提供服务,stream,zip,cherrypy,Stream,Zip,Cherrypy,我有这个密码 (实时压缩和流) 我面临的问题是,当我下载文件时,在下载完成之前,我无法浏览任何其他页面或发送任何其他请求。。。 我认为问题在于cherrypy一次/每个用户不能提供多个请求 有什么建议吗?当你说“每个用户”时,你的意思是另一个请求可能会进入另一个“会话”,并允许它继续吗 在这种情况下,您的问题几乎肯定是由于cherrypy中的会话锁定造成的。你可以阅读更多关于它的信息。由于会话在默认情况下是延迟解锁的,因此当备份仍在处理时,该会话不可供其他线程(连接)使用 尝试在该处理程序的_c

我有这个密码 (实时压缩和流)

我面临的问题是,当我下载文件时,在下载完成之前,我无法浏览任何其他页面或发送任何其他请求。。。 我认为问题在于cherrypy一次/每个用户不能提供多个请求

有什么建议吗?

当你说“每个用户”时,你的意思是另一个请求可能会进入另一个“会话”,并允许它继续吗

在这种情况下,您的问题几乎肯定是由于cherrypy中的会话锁定造成的。你可以阅读更多关于它的信息。由于会话在默认情况下是延迟解锁的,因此当备份仍在处理时,该会话不可供其他线程(连接)使用

尝试在该处理程序的_cp_配置中设置
tools.sessions.locking='explicit'
。由于您没有向会话写入任何内容,因此完全不锁定可能是安全的

祝你好运。希望能有所帮助。

另外,来自:


“CherryPy当然可以处理多个连接。通常是您的浏览器造成的。例如,Firefox一次只能打开两个到同一主机的连接(如果其中一个用于favicon.ico,那么您只能打开一个)。请尝试增加浏览器的并发连接数,或使用非浏览器的工具(如Sakege、Apache的ab甚至curl)测试您的站点。“

这正是我需要的!非常感谢您的帮助和即时回复!还有一个很好的提示:您可以在不需要时通过发出
cherrypy.session.release\u lock()
@cherrypy.expose
def backup(self):
    path = '/var/www/httpdocs'
    zip_filename = "backup" + t.strftime("%d_%m_%Y_") + ".zip"

    cherrypy.response.headers['Content-Type'] = 'application/zip'
    cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="%s"' % (zip_filename,)

    #https://github.com/gourneau/SpiderOak-zipstream/blob/3463c5ccb5d4a53fc5b2bdff849f25bae9ead761/zipstream.py
    return ZipStream(path)

backup._cp_config = {'response.stream': True}