Обработка нескольких входных данных с помощью нескольких эквивалентных команд (несколько пулов потоков )в параллельном режиме GNU

Лучше всего ввести каждую из ваших команд в терминал, чтобы проверить, что будет делать команда. В вашем случае, я думаю, вы хотите использовать следующее:

shutdown now
2
12.09.2020, 10:43
2 ответа

Примерно так:

gpus=2

find files |
  parallel -j +$gpus '{= $_ = slot() > '$gpus' ? "foo" : "bar" =}' {}

Менее страшно:

  parallel -j +$gpus '{=
      if(slot() > '$gpus') {
        $_ = "foo"
      } else {
        $_ = "bar"
      }
    =}' {}

-j +$gpusЗапуск одного задания на поток ЦП + $gpus

{=... =}Используйте код Perl для установки $ _.

slot()Номер слота задания (1..cpu _threads+$gpus ).

1
18.03.2021, 23:05
#!/usr/bin/env bash

values=( a b c d e f g h i j k l m n o p q r s t u v w x y z)
start=0

function foo()
{
        sleep 4
        echo "foo ${1}"
}

function bar()
{
        sleep 4
        echo "bar ${1}"
}

function baz()
{
        sleep 4
        echo "baz ${1}"
}

while [ ${#values[@]} -gt 0 ]
do 
        if [ ${#values[@]} -gt 0 ]
        then
                foo "${values[0]}" &
                values=("${values[@]:1}")
        fi

        if [ ${#values[@]} -gt 0 ]
        then
                bar "${values[0]}" &
                values=("${values[@]:1}")
        fi

        if [ ${#values[@]} -gt 0 ]
        then
                baz "${values[0]}" &
                values=("${values[@]:1}")
        fi

        wait
done

значения values=( a b c d e f g h i j k l m n o p q r s t u v w x y z)можно заменить наvalues=$(ls -1)

0
18.03.2021, 23:05

Теги

Похожие вопросы