Your opening of the image loads it in memory and this is what causes the increase in load under heavy use. As posted by Martin the real solution is to serve the file directly.
Here is another approach, which will stream your file in chunks without loading it in memory.
import os
import mimetypes
from wsgiref.util import FileWrapper
from django.http import StreamingHttpResponse
def download_file(request):
the_file = "/some/file/name.png"
filename = os.path.basename(the_file)
chunk_size = 8192
response = StreamingHttpResponse(
FileWrapper(
open(the_file, "rb"),
chunk_size,
),
content_type=mimetypes.guess_type(the_file)[0],
)
response["Content-Length"] = os.path.getsize(the_file)
response["Content-Disposition"] = f"attachment; filename={filename}"
return response