executa o comando em vários encadeamentos

1

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 velocidade de 4x, comprimindo efetivamente 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:13

3 respostas

2

Ambos os moreutils parallel e o GNU parallel farão isso por você. Com o paralelo do moreutils, parece que:

parallel -j "$(nproc)" pngquant [pngquant-options] -- *.png

nproc exibe o número de processadores disponíveis (encadeamentos), de forma que os processadores disponíveis ( -j "$(nproc)" ) pngquants sejam executados de uma só vez, passando cada um a um único arquivo PNG. Se a sobrecarga de inicialização for muito alta, você poderá passar mais arquivos PNG de uma vez para cada execução com a opção -n ; -n 2 passaria dois PNGs para cada pngquant.

    
por 10.05.2017 / 18:24
2

Com o GNU xargs :

find . -type f -name '*.png' -print0 | xargs -r0 -n10 -P "$(nproc)" pngquant

(cada invocação de pngquant recebe até 10 arquivos para compactar, até "$(nproc)" (o número de processadores em seu sistema) em execução ao mesmo tempo)

    
por 10.05.2017 / 18:47
1

Usando o GNU Parallel, é assim:

parallel pngquant --my-options ::: *.png

ou:

ls | grep \.png | parallel pngquant --my-options

O padrão é um trabalho por núcleo da CPU. No seu caso, você pode querer executar mais um trabalho do que os núcleos:

ls | grep \.png | parallel -j+1 pngquant --my-options

Isso ocorre porque pngquant usa o tempo para ler e gravar dados. Durante este tempo, ele aguarda o disco e dificilmente usa qualquer CPU, e assim você pode estar tendo algum tempo de CPU inativo. A única maneira de saber com certeza é medir e ver qual é o mais rápido.

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh.

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Por razões de segurança, você deve instalar o GNU Parallel com seu gerenciador de pacotes, mas se o GNU Parallel não estiver empacotado para sua distribuição, você pode fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 10.05.2017 / 23:14