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)
Вернуться на верх