0

我正在维护一个名为NotreDAM的开源文档资产管理应用程序,它是用 Django 编写的,在Apache上运行TwistedWeb的一个实例。

每当任何用户下载文件时,应用程序都会在整个下载期间为所有用户挂起。到目前为止,我已经在代码中跟踪了下载命令,但我对 Python/Django 的了解还不够,无法知道为什么会发生这种情况。

response = HttpResponse(open(fullpath, 'rb').read(), mimetype=mimetype)
response["Last-Modified"] = http_date(statobj.st_mtime)
response["Content-Length"] = statobj.st_size
if encoding:
    response["Content-Encoding"] = encoding
return response

您知道如何修复文件下载时挂起的应用程序吗?

4

2 回答 2

0

Web 服务器读取内存中的整个文件,而不是流式传输。它不是写得很好的代码,但本身不是错误。

这会在整个文件读取期间阻止 Apache 客户端(预分叉)。如果 IO 很慢并且文件很大,则可能需要一些时间。

通常你有几个预先分叉的 Apache 客户端配置来满足这种请求,但是在一个配置错误的 Web 服务器上你可能会出现这种问题,这不是 Django 问题。您的 Web 服务器可能只运行一个预分叉的进程,可能处于调试模式。

于 2012-01-17T20:53:11.817 回答
0

notreDAM 使用 django.views.static.serve() 命令为资产文件提供服务,根据 Django 文档,该命令“使用此方法效率低且不安全。请勿在生产环境中使用它。仅将其用于开发。” 所以我们开始了。我必须使用另一个命令。

于 2012-01-18T21:55:26.457 回答