2

我有这个代码(动态压缩和流)

@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}

我面临的问题是当我下载文件时,我无法浏览任何其他页面或发送任何其他请求,直到下载完成......我认为问题是cherrypy一次不能服务多个请求/每个用户

有什么建议吗?

4

2 回答 2

6

当您说“每个用户”时,您的意思是另一个请求可能会进入不同的“会话”并且可以继续吗?

在这种情况下,您的问题几乎可以肯定是由于cherrypy 中的会话锁定。您可以阅读更多关于它的会话代码。由于默认情况下会话解锁较晚,因此在仍在处理备份时会话不可用于其他线程(连接)。

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

祝你好运。希望有帮助。

于 2012-05-10T12:57:56.883 回答
0

此外,从常见问题解答

“CherryPy 当然可以处理多个连接。罪魁祸首通常是你的浏览器。例如,Firefox 一次只会打开两个到同一主机的连接(如果其中一个是用于 favicon.ico,那么你”减少到一个)。尝试增加浏览器建立的并发连接数,或者使用不是浏览器的工具测试您的站点,例如 siege、Apache 的 ab 甚至 curl。

于 2012-05-11T14:07:12.460 回答