web.py + mod_wsgi 文件上传问题

0 投票
1 回答
902 浏览
提问于 2025-04-16 11:25

我正在开发一个使用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 中的会话对象。它会使用数据库或者文件来存储数据,这样不同的线程或进程都可以访问这些数据。

web.py 会话示例

撰写回答