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

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

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 

Благодарю.

  • Как легко создать собственный Linux Distro?
  • Преобразование содержимого файла в нижний регистр и сохранение результата в том же файле
  • Если я хочу создать графический интерфейс, который отображает точно те же данные, что и команда TOP в LINUX, откуда я получу данные?
  • Установка загрузчика ядра EFI в ядре 3.2?
  • Инструкции по смешиванию двух аудиопотоков
  • Как я могу предотвратить дисковый ввод-вывод от захвата моего процессора?
  • Как работают демоны с учетной записью пользователя с недопустимой оболочкой?
  • Как получить выполняемые в настоящее время семафоры с помощью / proc?
  • 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 '@' 
    Linux и Unix - лучшая ОС в мире.