Było kilka podobnych pytań, ale moim problemem nie jest "uruchamianie kilku programów równolegle" - co można w prosty sposób wykonać przy pomocy parallel
lub xargs
.Jak uruchomić daną funkcję w Bash równolegle?
Potrzebuję zrównoleglić funkcje Bash.
Wyobraźmy sobie kod tak:
for i in "${list[@]}"
do
for j in "${other[@]}"
do
# some processing in here - 20-30 lines of almost pure bash
done
done
Niektóre przetwarzania wymaga połączenia do zewnętrznych programów.
Chciałbym uruchomić niektóre (4-10) zadań, każdy działa dla różnych $i
. Łączna liczba elementów na liście $ wynosi> 500.
Wiem, że mogę umieścić całą pętlę for j ... done
w zewnętrznym skrypcie i po prostu wywołać ten program równolegle, ale czy można to zrobić bez podziału funkcji między dwa oddzielne programy ?
Spróbuj użyć funkcji. Lub coś w stylu 'var1 = \' ls && pwd && ls && pwd & \ '' wewnątrz twojej pętli. –
Tak, ale nie chcę uruchamiać * wszystkich * iteracji na raz. Chciałbym mieć 4 równoczesne procesy robocze, a jeśli któryś z nich się zakończy - zacznij nowy. Rodzaj: 'cat work_params | xargs -L1 -P4 do_bit_of_work' działa. –
Hmmm ... 4 pracowników. Sądzę, że będziesz musiał wtedy ustawić jakieś semafory. I przepytywać ich okresowo. –