Django Python ProcessPoolExecutor Zip на лету
Я ищу, чтобы ускорить функцию, которая генерирует молнию на лету. У меня нет другого выбора, потому что пользователи должны загружать разные файлы в зависимости от ролей и не могут подготовить их заранее. Я обнаружил ProcessPoolExecutor, который позволяет нам использовать параллельные задачи для ускорения последовательных функций. Так что я хотел бы знать, возможно ли создание zip на лету. Следуя моему фактическому коду, который занимает 22,4 секунды, чтобы сгенерировать для 1900 файлов (jpg и pdf) за zip 416,7mo
zipFilename = "%s.zip" % "test"
buffer = BytesIO()
zip = zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED)
for filepath in filepaths:
absfilepath = os.path.join(settings.MEDIA_ROOT, filepath)
filedir, filename = os.path.split(absfilepath)
zip.write(absfilepath, os.path.join(zipFilename, filename))
zip.close()
response = HttpResponse(buffer.getvalue(), content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=test.zip'
response['Content-Length'] = buffer.tell()
response.status_code = self.responseStatus = status.HTTP_200_OK
buffer.seek(0)
return response