скрипт оболочки запускает несколько файлов - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу использовать сценарий оболочки в цикле for, который запускает 100 файлов параллельно.

В настоящее время у меня есть сценарий оболочки следующего формата:

#!/bin/bash
NUM=10
python a1.py $((NUM + 0)) &
python a2.py $((NUM + 2)) &
python a3.py $((NUM + 4)) &
python a4.py $((NUM + 6)) &
python a5.py $((NUM + 8)) &

Теперь, если у меня есть a1.py, a2.py, a3.py .... a100.pyи я хочу запустить их параллельно, как мне сделать это в цикле for?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Если у вас есть bash версия 4 и вы запустите это:

echo {10..208..2} 

Вы получите:

10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60
62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 
110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 
148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 
186 188 190 192 194 196 198 200 202 204 206 208

, которая выглядит как ваша серия.Затем, если вы хотите запустить множество заданий параллельно, я бы использовал GNU Parallel .Это предлагает вам {#} в качестве заполнителя для номера вакансии.Итак, если вы запустите это:

parallel -k echo {#} {} ::: {10..208..2}

Вы получите это:

1 10
2 12
3 14
4 16
5 18

Итак, чтобы запустить ваши настоящие сценарии, что-то вроде:

parallel -k --dry-run 'python a{#}.py {}' ::: {10..208..2}

Пример вывода

python a1.py 10
python a2.py 12
python a3.py 14
python a4.py 16
...
...

Если это выглядит хорошо, запустите снова без --dry-run и без -k, который сохраняет выходные данные для облегчения отладки.

TLDR;

Мой самый краткий ответ с GNU Parallel :

parallel python a{#}.py {} ::: {10..208..2}

Или, если у вас нетbash версия 4:

parallel python a{#}.py {} ::: $(seq 10 2 208)
0 голосов
/ 24 декабря 2018
NUM=10
for ((i=0; i<100; i++)); do echo python a$(($i+1)).py $(($NUM+$i*2)); done

Вывод:

python a1.py 10
python a2.py 12
python a3.py 14
.
.
.
python a98.py 204
python a99.py 206
python a100.py 208

Если все выглядит хорошо, используйте:

NUM=10
for ((i=0; i<100; i++)); do python a$(($i+1)).py $(($NUM+$i*2)) & done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...