Django Python ProcessPoolExecutor Zip на лету - PullRequest
0 голосов
/ 30 октября 2018

Я ищу, чтобы ускорить функцию, которая генерирует почтовый индекс на лету. У меня нет другого выбора, потому что пользователи должны загружать разные файлы в зависимости от ролей и не могут подготовить их заранее. Я обнаружил ProcessPoolExecutor, который позволяет нам использовать параллельные задачи для ускорения последовательных функций. Так что я хотел бы знать, возможно ли создание zip на лету. Следуя моему фактическому коду, который занимает 22,4 секунды, чтобы сгенерировать 1900 файлов (jpg и pdf) для почтового индекса 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 
...