executa o comando em vários encadeamentos

2

Estou executando um comando (pngquant para ser preciso: link ) em uma janela de terminal. Notei que, se eu abrir 4 janelas de terminal e executar o comando pngquant em cada uma delas, obtenho um aumento de 4x na velocidade, efetivamente comprimindo 4 vezes mais imagens no mesmo tempo que antes.

Então usei essa abordagem e atribuí a cada processo pngqunat uma parte das imagens que eu quero compactar, criando efetivamente vários processos em vários segmentos

Você pode executar o comando em vários segmentos sem fazer esses truques? Gostaria de dizer apenas "execute a compactação pngquant em todas essas imagens e use todos os threads disponíveis".

    
por sanjihan 10.05.2017 / 18:11

2 respostas

0

Você está procurando exatamente o mesmo sistema esta questão recente necessária. A resposta dada (script python-based-based) irá se encaixar perfeitamente às suas necessidades, uma vez adaptada um pouco para o seu caso mais simples.

    
por 10.05.2017 / 21:53
1

Expandindo meu comentário anterior para uma resposta.

O Gnu paralelo é a ferramenta de linha de comando concebida para executar trabalhos simultaneamente, fazendo uso de vários threads, núcleos, CPUs, PCs. xargs agora oferece funcionalidade semelhante com a adição da opção -P .

Eu fiz um teste para você em um VPS de dois núcleos, usando pngquant para converter um monte de .png de arquivos (126 imagens com tamanho médio de 9 MB).

pngquant *.png demorou 26 minutos.

find . -iname "*.png" | parallel pngquant {} demorou 14 minutos.

top mostra a execução paralela de dois comandos pngquant por vez:

  PID USER    PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5808 user    20   0   70948  59164   2140 R 100.0  2.9   0:03.49 pngquant
 5811 user    20   0   70952  61000   2024 R  99.3  3.0   0:05.67 pngquant
    
por 12.05.2017 / 16:00