我正在开发一个用于上传文件的web.py应用程序,我的部署遇到了实际问题。基本上我想给用户一个'上传的百分比',但是当部署在mod_wsgi上时,这似乎很严重。主要上传的工作方式如下:
out = open(path, 'wb', 1000)
while (True):
packet = fileU.file.read(1000)
if not packet:
break
else:
out.write(packet)
sessions[code].progress += 1
out.close()
'Session'是一个全局字典,包含跟踪会话的对象。为了获得当前进度,我每秒通过客户端的GET请求获得给定会话的当前进度。
目前的问题是,这仅适用于小型上传。似乎超过100kb的任何东西都不会增加进度变量。如果放在循环之外(或者在调用read()之前)或者文件相当小,则值肯定会增加。
wsgi是否可能为更大的文件打开新线程,从而使我的全局计数器只对上传线程本地?可能是其他的东西。
答案 0 :(得分:2)
你不能只使用全球字典。实际上,Web服务器很可能使用单独的线程来提供以下请求,并且无法保证会话字典是相同的。尝试使用属于web.py的会话对象。它使用db或文件来存储可以跨不同线程或进程访问的数据。