Ci sono state alcune domande simili, ma il mio problema non è "eseguire diversi programmi in parallelo" - cosa che può essere banalmente fatta con parallel
o xargs
.Come eseguire una determinata funzione in Bash in parallelo?
Ho bisogno di parallelizzare le funzioni di Bash.
Immaginiamo codice come questo:
for i in "${list[@]}"
do
for j in "${other[@]}"
do
# some processing in here - 20-30 lines of almost pure bash
done
done
Alcuni del trattamento richiede chiamate a programmi esterni.
Mi piacerebbe eseguire alcune (4-10) attività, ciascuna in esecuzione per diversi $i
. numero totale di elementi in lista è $> 500.
so di poter mettere l'intera for j ... done
loop in script esterno, e basta chiamare questo programma in parallelo, ma è possibile fare a meno di dividere la funzionalità tra due programmi separati ?
Provare a utilizzare le funzioni. O qualcosa come 'var1 = \' ls && pwd && ls && pwd & \ '' nel tuo ciclo. –
Sì, ma non voglio eseguire * tutte * le iterazioni contemporaneamente. Mi piacerebbe avere 4 processi di lavoro simultanei, e se qualcuno di loro finisce, ne inizi uno nuovo. Un po 'come: 'cat work_params | xargs -L1 -P4 do_bit_of_work' funziona. –
Hmmm ... 4 lavoratori. Immagino che dovrai creare una specie di semafori allora. E sondaggi periodicamente. –