Unoconv преобразование из docx в pdf не работает асинхронно
Гол
Я хочу сделать решение, которое может конвертировать несколько файлов docx (представленных через отдельные параллельные запросы) в pdf.
Что я пробовал и как оно себя ведет
После борьбы с libreoffice --headless я наткнулся на unoconv, который создает слушателя для libreoffice, чтобы обрабатывать несколько запросов. Хотя, в отличие от libreoffice --headless, он не
не отказывается конвертировать файлы docx, переданные через параллельные запросы, кажется, что внутренне они все еще обрабатываются последовательно. Например: Если файлы A.docx и B.docx конвертируются в .pdf за 20 и 1,1 секунды соответственно, то если оба файла отправлены двумя параллельными запросами и конвертация обоих начинается в 00:00:00, то процесс конвертации обоих файлов заканчивается в 00:00:20.
Поведение, которое я хочу
Однако, я хочу, чтобы файлы в формате pdf возвращались сразу после их конвертирования, например: Просто вернуть pdf для B.docx через 1.1 секунды, продолжать конвертировать A.docx и вернуть его также через 20 секунд.
Вот минимальный Django View для того, что я пытаюсь сделать:
def convert(request):
docx_file = request.FILES['docx_file']
file = open(docx_file.name, "w+")
file.write(docx_file.read())
cmd = "unoconv -f pdf %s" % file.name
subprocess.Popen(cmd.split()).communicate(timeout=30)
pdf_file_name = "%s.pdf" % os.path.splitext(file.name)[0]
pdf_file = open(pdf_file_name, 'rb')
return FileResponse(pdf_file, as_attachment=True)