cherrypy服务多个请求/每个连接

时间:2012-05-10 12:54:34

标签: stream zip cherrypy

我有这个代码 (即时压缩和流)

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

任何建议?

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:0)

另外,来自FAQ

“CherryPy当然可以处理多个连接。通常你的浏览器是罪魁祸首。例如,Firefox一次只能打开两个连接到同一个主机(如果其中一个连接用于favicon.ico,那么你只需要一个。)尝试增加浏览器的并发连接数,或者使用不是浏览器的工具测试你的网站,比如围攻,Apache的ab,甚至卷曲。“