100個のファイルを並行して実行するforループでシェルスクリプトを使用したいと思います。
現在、次の形式のシェルスクリプトがあります。
#!/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ループでそれを行うのですかどのように、それらを並行して実行したいですか?
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
あなたのシリーズのように見えます。次に、多数のジョブを並行して実行する場合は、GNUParallelを使用します。これ{#}
により、ジョブ番号のプレースホルダーとして使用できます。したがって、これを実行すると、次のようになります。
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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加