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

@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不能一次/每个用户服务多个请求

有什么建议吗?

最佳答案

当您说“每个用户”时,您是说可能会发出另一个请求来请求不同的“会话”,并且该请求可以继续吗?

在这种情况下,您的问题几乎可以肯定是由于cherrypy中的会话锁定造成的。您可以阅读更多有关session code的信息。由于默认情况下会话是在较晚的时间后解锁的,因此该会话不可用于其他线程(连接),而仍在处理备份。

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

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

关于stream - cherrypy服务/每个连接多个请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10534449/

10-10 00:21
查看更多