Назад | Перейти на главную страницу

многопоточность однопоточного рабочего приложения

У меня есть сервер, который я хочу выделить для конвертации doc файлы в pdf через LibreOffice. Сервер имеет 6 ядер, а LibreOffice является однопоточным. Это означает, что создание одного pdf-файла использует 16,666% всей мощности моего процессора. Преобразование файла может быть выполнено с консоли и является блокирующей задачей, то есть ожидает завершения, чтобы вернуть управление консоли.

Я мог бы запустить 6 экземпляров безголового офиса (на 6 разных портах) и с помощью некоторого настраиваемого кода убедиться, что каждый рабочий запрос отправляется другому экземпляру. Мне пришлось бы проверять, когда все 6 экземпляров заняты работой, поэтому я бы оставил работу в буфере ожидающей очереди. Мне также пришлось бы управлять таймаутами / ошибками, чтобы перезапустить конкретный экземпляр и попытаться повторить конкретную работу, вызвавшую проблему, возможно, еще 1-2 попытки, пока я не сдамся.

В приведенном выше сценарии не будет использоваться 100% ЦП для одного документа, но он позволит конвертировать до 6 документов за раз, вместо того, чтобы обрабатывать их один за другим при мощности всего 16,6%.

Мой вопрос: существует ли продукт / инструмент для управления таким сценарием? Вероятно, что-то общее, что могло бы управлять такими задачами (конечно, не зная каких-либо особенностей LibreOffice).

Вы можете захотеть проверить GNU parallel:

GNU parallel - это инструмент оболочки для параллельного выполнения заданий с использованием одного или нескольких компьютеров.

В документации есть множество примеров, в том числе GNU Parallel как процессор dir на который, вероятно, стоит взглянуть.

Конечно, для этого вам нужно будет написать довольно много сценариев, и в конце вы даже можете прийти к выводу, что также проще выполнять все планирование в ваших сценариях.