次のbashスクリプトがあります。
for i in {0800..9999}; do
for j in {001..032}; do
wget http://example.com/"$i-$j".jpg
done
done
すべての写真がそこにあり、実際には各反復は他の反復に依存しません。スレッド数を並列化して制御する方法は何ですか?
ベストアンサー1
Confiqの答えは小さなi
合計に対してうまく機能しますj
。ただし、質問のi
合計サイズを考慮すると、j
生成されるプロセスの総数を制限できます。parallel
コマンドまたはいくつかのバージョンを使用できますxargs
。たとえば、-P
このフラグをサポートするxargsを使用すると、次のように内部ループを並列化できます。
for i in {0800..9999}; do
echo {001..032} | xargs -n 1 -P 8 -I{} wget http://example.com/"$i-{}".jpg
done
GNUパラレルより複雑な動作が必要な場合は多数の機能が提供され、次の2つのパラメータを使用して簡単に並列化できます。
parallel -a <(seq 0800 9999) -a <(seq 001 032) -P 8 wget http://example.com/{1}-{2}.jpg