Вызов GNU параллельно из GNU параллельно

Как правильно вкладывать звонки в GNU parallel?

Глупый пример:

seq 1 100 | parallel echo {} | parallel seq {} 1000

Насколько я понимаю, на коробке с 8 процессорами каждая параллель будет запускать 8 заданий, всего 64 задания. Если вы называете что-то более существенное, чем seq это может потенциально перегрузить коробку. Есть ли способ ограничить количество рабочих мест, но при этом полностью использовать параллелизм?

1 ответ

Используйте -j, чтобы ограничить внешнюю или внутреннюю параллель:

seq 1 100 | parallel -j1 "echo {} | parallel -I // seq // 1000"

Часто вы можете выразить вложенную команду, используя mulitple:::: или::: следующим образом:

parallel seq {1} {3} {2} :::: <(seq 10) <(seq 20 30) ::: 1 2 3

Это лучше, потому что вы будете поддерживать выполнение 8 заданий в любое время, в то время как вышеописанное будет выполнять менее 8 заданий на 8-ядерном компьютере.

Другие вопросы по тегам