通过Django HttpResponse提供的文件是否从磁盘输入内存或流?

时间:2018-10-19 13:03:03

标签: python django apache

假设您有两个在Django中提供大文件的选项,您可以:

  1. 向公众打开媒体目录,然后直接通过Apache,Nginx等提供文件。

  2. 您可以先使用Django处理文件,然后再发送,如下所示:

from django.core.files.base import File
from django.http import HttpResponse, HttpResponseNotModified

def send_the_file(request, filename):

    # Do something ...

    # Send the file ...
    with File(open(filename, 'rb')) as f:
        response = HttpResponse(f.chunks())
    return response

Django会像Apache一样从磁盘流式传输大文件吗?还是我会浪费线程和空间将整个文件读入内存?

1 个答案:

答案 0 :(得分:0)

一般...是的。

如果使用StreamingHttpResponse,则可能不会一次将其全部读入内存,因为您可以在发送下一个块之前对文件块进行垃圾回收。整个文件仍然会通过内存。

如果要避免将文件读取到内存中(从而避免将Django工作线程专用于请求),则应使用Django将指令传递给服务器的API,以从磁盘发送文件。该API完全取决于您的服务器。