ランダムな間隔で事前定義された数のファイルを生成する次のプロセスがあります。
#!/bin/bash
for i in {1..10}
do
sleep $(shuf -i 20-60 -n 1)
echo $i > file_$i.txt
done
次のように、GNU Parallelを使用して各ファイルで独立して実行される別のプロセスがあります。
parallel wc -l ::: file_{1..10}.txt
予想通り、並列処理は現在利用可能なファイルで実行されます。残りのファイルが利用可能になるまで並列に待機し、できるだけ早く実行する方法はありますか?
ベストアンサー1
ターミナル1:
true >jobqueue; tail -n+0 -f jobqueue | parallel -u
(-u
このオプションは画面にすぐに出力したい場合は必須です。そうしないと、次のジョブが完了するまで出力が遅れます。どちらの場合も、ジョブはすぐに実行されます。)
NO2。ターミナル:
#!/bin/bash
for i in {1..10}
do
sleep $(shuf -i 20-60 -n 1)
echo $i > file_$i.txt
echo file_$i.txt >> jobqueue
done
このファイルがmy_dirで生成された唯一のファイルであることを確認してください。https://www.gnu.org/software/parallel/parallel_examples.html#example-gnu-parallel-as-dir-processor
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |
parallel -u echo
これにより、jobqueue
ファイルは必要ありません。