web.py + mod_wsgi 文件上传问题
我正在开发一个使用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在处理大文件时开启了新的线程,因此导致我的全局计数器只在上传线程中有效?或者可能还有其他原因。
1 个回答
2
你不能仅仅使用一个全局的字典来解决这个问题。实际上,网络服务器很可能会用一个单独的线程来处理后续的请求,这样就不能保证会话字典是一样的。建议你使用 web.py 中的会话对象。它会使用数据库或者文件来存储数据,这样不同的线程或进程都可以访问这些数据。