GNU/Linux >> Linux Esercitazione >  >> Linux

Quattro compiti in parallelo... Come farlo?

Ho un sacco di immagini PNG su una directory. Ho un'applicazione chiamata pngout che eseguo per comprimere queste immagini. Questa applicazione è chiamata da uno script che ho fatto. Il problema è che questo script ne esegue uno alla volta, qualcosa del genere:

FILES=(./*.png)
for f in  "${FILES[@]}"
do
        echo "Processing $f file..."
        # take action on each file. $f store current file name
        ./pngout -s0 $f R${f/.//}
done

L'elaborazione di un solo file alla volta richiede molto tempo. Dopo aver eseguito questa app, vedo che la CPU è solo del 10%. Quindi ho scoperto che posso dividere questi file in 4 batch, mettere ogni batch in una directory e attivarne 4, da quattro finestre di terminale, quattro processi, quindi ho quattro istanze del mio script, allo stesso tempo, che elaborano quelle immagini e il il lavoro richiede 1/4 del tempo.

Il secondo problema è che ho perso tempo a dividere immagini e batch e copiare lo script in quattro directory, aprire 4 finestre di terminale, bla bla...

Come si fa con uno script, senza dover dividere nulla?

Intendo due cose:prima come faccio a partire da uno script bash, attivare un processo in background? (aggiungi solo &alla fine?) Secondo:come faccio a interrompere l'invio di attività in background dopo aver inviato la quarta attività e mettere lo script in attesa fino alla fine delle attività? Voglio dire, basta inviare una nuova attività in background quando una attività finisce, mantenendo sempre 4 attività in parallelo? se non lo faccio, il ciclo attiverà miliardi di attività in background e la CPU si intaserà.

Risposta accettata:

Se hai una copia di xargs che supporta l'esecuzione parallela con -P , puoi semplicemente farlo

printf '%s
Linux
  1. Come eseguire il debug di uno script Bash?

  2. Come elencare i file che sono stati modificati in un determinato intervallo di tempo?

  3. Come ricordare le opzioni di comando??

  4. Come riprodurre un suono quando l'esecuzione dello script è pronta?

  5. Come eseguire uno script??

Come eseguire uno script Python in PHP

Come eseguire uno script Bash

Come eseguire un comando in uno script della shell?

Come testare uno script PHP

Come posso assicurarmi che sia in esecuzione solo un'istanza di uno script Ruby alla volta?

Come faccio a creare uno script di configurazione?