multithreading de um único trabalhador de aplicativo encadeado [fechado]

3

Eu tenho um servidor que desejo dedicar para converter arquivos doc em pdf via LibreOffice. O servidor tem 6 núcleos e o LibreOffice é de encadeamento único. Isso significa que gerar um único pdf usa 16,666% da minha capacidade total de CPU. A conversão de um arquivo pode ser feita a partir do console e é uma tarefa de bloqueio, ou seja, ele aguarda até que seja feito para retornar o controle ao console.

Eu poderia iniciar 6 instâncias de escritório sem suporte (em 6 portas diferentes) e, por meio de um código personalizado, garantir que cada solicitação de trabalho vá para uma instância diferente. Eu teria que verificar quando todas as 6 instâncias estão ocupadas trabalhando para que eu iria realizar o trabalho em um buffer de fila pendente. Eu também teria que gerenciar tempos limites / erros para reiniciar a instância específica e tentar refazer o trabalho específico que causou o problema, talvez por mais 1-2 tentativas até que eu desista.

O cenário acima não utilizará 100% cpu para um único documento, mas permitirá converter até 6 documentos por vez, em vez de processá-los um após o outro com apenas 16,6% de energia.

Minha pergunta é: existe um produto / ferramenta para gerenciar tal cenário? Provavelmente algo genérico que poderia orquestrar tais tarefas (sem saber nada sobre o LibreOffice, é claro).

    
por cherouvim 11.08.2015 / 12:32

1 resposta

5

Você pode querer verificar o paralelo GNU :

GNU parallel is a shell tool for executing jobs in parallel using one or more computers.

Existem muitos exemplos nos documentos, incluindo Paralelo GNU como processador dir que você provavelmente deveria dar uma olhada.

É claro que você precisará fazer alguns scripts para isso, e no final você pode até chegar à conclusão de que é mais fácil fazer todo o agendamento em seus scripts também.

    
por 11.08.2015 / 13:00