сделать петлю параллельной

Как сделать этот цикл параллельным:

for a in $(seq 1 3) do for b in 0.1 0.2 do echo process with a=$a and b=$b & done done 

это параллельно или нет? На самом деле, я хочу запустить echo process with a=$a and b=$b параллельно для каждой комбинации значений a и b Вот результат запуска указанной оболочки:

 process with a=1 and b=0.1 process with a=2 and b=0.2 process with a=2 and b=0.1 process with a=3 and b=0.2 process with a=3 and b=0.1 process with a=1 and b=0.2 

Благодарю.

3 Solutions collect form web for “сделать петлю параллельной”

С GNU Parallel это выглядит так:

 parallel echo process with a={1} and b={2} ::: 1 2 3 ::: 0.1 0.2 seq 1 3 | parallel echo process with a={1} and b={2} :::: - ::: 0.1 parallel echo process with a={1} and b={2} :::: <(seq 1 3) ::: 0.1 0.2 

Я предполагаю, что echo является просто примером, поскольку параллелизующее echo вряд ли стоит того.

Если вещь, которую вы запускаете во внутреннем цикле, занимает какое-то время ( echo очень быстро запускается), тогда, когда петли запустили все асинхронные процессы, они будут работать одновременно .

Сами петли не являются «параллельными».

Это должно быть комментарий, но комментарии слишком малы.

Убедитесь, что ваше решение работает для вывода произвольных размеров и не смешивает выходные данные из одного задания с другим. Вот небольшой пример, чтобы проверить, что:

 #!/bin/bash # stress test of parallelizing programs longline() { # print one big line with 'a's followed by 'b's followed by 'c's perl -e 'print "@ARGV ", map { "$_"x10000000 } (a..c)' "$@" echo } echo "Run testprogram in parallel" for a in $(seq 1 3) do for b in 0.1 0.2 do longline $a $b & done done | # use 'tr' to compress many 'a's into a single 'a' # if the output is not 'abc' on every line, lines have been mixed tr -cs '@' echo "Run testprogram in serial" for a in $(seq 1 3) do for b in 0.1 0.2 do longline $a $b done done | tr -cs '@' echo "Compare with GNU Parallel" export -f longline parallel -kj0 longline :::: <(seq 1 3) ::: 0.1 0.2 | tr -cs '@' 
  • Читают ли трубы не больше, чем PIPE_BUF?
  • возможность параллельной сборки приложения
  • Несколько tar-процессов одновременно записываются в один и тот же архив
  • Как запустить набор программ внутри tmux или gnome-terminal в сценарии?
  • Где / когда - статусы выхода, возвращаемые для фоновых заданий в bash?
  • трубопровод с недетерминированным выходом
  • «Нет имени пользователя PostgreSQL» - возможные проблемы параллелизма?
  • Выполните две команды параллельно, но только дождитесь завершения одной команды, прежде чем запускать следующую
  • Одновременно вычислите несколько дайджестов (md5, sha256)?
  • `mpirun -np N`: что, если` N` больше моих физических ядер?
  • Запустите несколько сценариев и продолжайте работу до тех пор, пока не будет выполнен каждый сценарий
  • одновременное торможение
  • Linux и Unix - лучшая ОС в мире.