Erro de memória do Django Filewrapper que serve arquivos grandes, como transmitir

Eu tenho um código como este:

@login_required
def download_file(request):
    content_type = "application/octet-stream"
    download_name = os.path.join(DATA_ROOT, "video.avi")

    with open(download_name, "rb") as f:
        wrapper = FileWrapper(f, 8192)
        response = HttpResponse(wrapper, content_type=content_type)
    response['Content-Disposition'] = 'attachment; filename=blabla.avi'
    response['Content-Length'] = os.path.getsize(download_name)
    # response['Content-Length'] = _file.size
    return response

Parece que funciona. No entanto, se eu baixar arquivos maiores (~ 600 MB por exemplo), meu consumo de memória aumentará em 600 MB. Depois de alguns desses downloads, meu servidor lança:

Erro interno do servidor: / download / Traceback (última chamada mais recente):
O arquivo "/home/matous/.local/lib/python3.5/site-packages/django/core/handlers/exception.py", linha 35, em resposta interna = get_response (request) File "/ home / matous /. local / lib / python3.5 / site-packages / django / core / handlers / base.py ", linha 128, em _get_response response = self.process_exception_by_middleware (e, request) Arquivo" /home/matous/.local/lib/ python3.5 / pacotes do site / django / core / handlers / base.py ", linha 126, em _get_response response = wrap_callback (request, * callback_args, ** callback_kwargs) Arquivo" /home/matous/.local/lib/python3 .5 / site-packages / django / contrib / auth / decorators.py ", linha 21, em _wrapped_view retorna view_func (request, * args, ** kwargs) Arquivo" / media / matous / 89104d3d-fa52-4b14-9c5d- 9ec54ceebebb / home / matous / phd / emoapp / emoapp / mainapp / views.py ", linha 118, em download_file response = HttpResponse (wrapper, content_type = content_type) Arquivo" /home/matous/.local/lib/python3.5/ site-packages / django / http / response.py ", linha 285, eminiciar self.content = content Arquivo "/home/matous/.local/lib/python3.5/site-packages/django/http/response.py", linha 308, no conteúdo content = b ''. join (self.make_bytes (chunk) para chunk em valor) MemoryError

O que estou fazendo errado? É possível configurá-lo de alguma forma para transmiti-lo peça por peça do disco rígido sem esse armazenamento de memória insano?

Nota: Eu sei que arquivos grandes não devem ser servidos pelo Django, mas estou procurando uma abordagem simples que permita verificar os direitos de acesso do usuário para qualquer arquivo servido.

questionAnswers(1)

yourAnswerToTheQuestion