Simplesmente com o GNU parallel
:
parallel ::: 'pip install pipenv && pipenv install --dev' \
'npm install -g grunt-cli && npm install'
Eu não entendo como posso combinar comandos paralelos e sequenciais no Linux.
Pseudocódigo :
pip install pipenv
sequencial pipenv install --dev
paralela
npm install -g grunt-cli
sequencial npm install
Equivalente de trabalho em lotes do Windows :
start cmd /C "pip install pipenv & pipenv install --dev"
start cmd /C "npm install -g grunt-cli & npm install"
&
e wait
possa resolver esse problema, consulte comentário do rsaw . Eu tento parallelshell :
parallelshell "pip install pipenv && pipenv install --dev" "npm install -g grunt-cli && npm install"
Completamente .sh
file:
git clone --depth 1 https://github.com/Kristinita/KristinitaPelican
wait
cd KristinitaPelican
wait
parallelshell "pip install pipenv && pipenv install --dev" "npm install -g grunt-cli && npm install"
Mas no primeiro comando pipenv install --dev
executado para mim, então npm install
. É sequencial, não paralelo.
O equivalente no estilo Unix dos seus comandos do Windows é o seguinte:
(pip install pipenv && pipenv install --dev) >& pip.log &
(npm install -g grunt-cli && npm install) >& npm.log &
Isso inicia duas sub-shells em segundo plano, uma executando pip
seguido por pipenv
(se pip
concluir sem erro), a outra executando os dois comandos npm
. Os dois conjuntos de saídas dos comandos são redirecionados para os arquivos de log, para manter as coisas inteligíveis.
Se você precisar esperar que todos esses comandos sejam concluídos antes de continuar, use
wait
como você já descobriu.
Ao sequenciar e fazer o paralelismo de tarefas usando um shell no estilo POSIX, existem duas ferramentas à sua disposição:
&
no final de um comando) e permite que você aguarde a conclusão delas (usando wait
) Isso é bom o suficiente para requisitos simples, como sua tarefa atual, e pode levar você muito longe. Existem ferramentas mais avançadas para casos de uso mais complexos; O GNU Parallel é um deles, também vale a pena pesquisar em ferramentas de lotes se você precisar de um controle de recursos melhor.
Tags shell gnu-parallel parallelism