Как конвертировать файлы в PDF одновременно?

У меня есть веб-приложение node.js, и я хочу иметь возможность конвертировать множество документов (одновременно) в PDF. В этот момент я использую libreoffice с очередью (Цель очереди - избежать бесконечного преобразования файла - если libreoffice не может преобразовать файл за определенный период времени, я убиваю процесс). Проблема в том, что если у меня есть два пользователя, которые загружают файлы, и оба загружают большие файлы, второй пользователь должен дождаться завершения первого.

Есть ли способ конвертировать файлы одновременно?

Я готов заменить libreoffice другим конвертером PDF.

Заранее спасибо.


person roroinpho21    schedule 26.10.2015    source источник
comment
попробуйте pandoc pandoc -o output.pdf -f docx input.docx   -  person prasun    schedule 26.10.2015
comment
Я тоже должен конвертировать .xlsx документ.   -  person roroinpho21    schedule 26.10.2015


Ответы (1)


Один из способов одновременного выполнения нескольких преобразований — просто запустить несколько процессов, выполняющих преобразования. Затем всякий раз, когда что-то добавляется в очередь, оно будет передано следующему доступному внешнему процессу, работающему над преобразованиями. Поскольку преобразование файлов, скорее всего, является сочетанием операций ввода-вывода ЦП и диска, вы можете поэкспериментировать с оптимальным количеством поддерживаемых процессов преобразования.

Существует несколько способов управления очередью. Если бы ваше приложение node.js поддерживало очередь, то оно бы управляло процессом передачи элемента из очереди внешнему процессу и отслеживало, какие внешние процессы свободны и готовы к новому заданию. Если бы очередь находилась в базе данных или в файловой системе, которую могли читать все внешние процессы, то сами внешние процессы могли бы наблюдать за очередью.

person jfriend00    schedule 26.10.2015
comment
Я думаю, что проблема в libreoffice, потому что если я открою два терминала и в каждом из них запущу команду преобразования файла, то второй терминал будет ждать, пока первый завершит преобразование. - person roroinpho21; 26.10.2015
comment
Чтобы выполнить преобразование файла, я использую команду libreoffice --headless --convert-to pdf path-to-file с помощью node.js childProcess spawn. - person roroinpho21; 26.10.2015
comment
@ roroinpho22 - Тогда вам понадобится другой конвертер. - person jfriend00; 26.10.2015
comment
@roroinpho21 — этот пост предполагает, что вы можете запустить LibreOffice с другим профилем, тогда он не будет подключаться к текущему запущенному экземпляру, и вы сможете запустить несколько одновременно. И еще один способ сделать это здесь: Параллельное преобразование документов ODT › PDF Libreoffice . - person jfriend00; 26.10.2015
comment
Спасибо, я проанализирую эти возможности - person roroinpho21; 27.10.2015