GNUパラレル:一部のファイルが利用可能になったときに実行し、残りは待ちます。

GNUパラレル:一部のファイルが利用可能になったときに実行し、残りは待ちます。

ランダムな間隔で事前定義された数のファイルを生成する次のプロセスがあります。

#!/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

見ているhttps://www.gnu.org/software/parallel/parallel_examples.html#example-gnu-parallel-as-queue-system-batch-manager

ターミナル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ファイルは必要ありません。

おすすめ記事