GNU Parallelを使用して、システムに格納されたファイルを並行して検索することができるかどうか評価しています。システム上の各年の1日に1つのファイルしか存在できません(したがって、最大366ファイル/年)。システム上に3660のファイルがあるとします(約10年間のデータ)。システムは、マルチCPUマルチコアLinuxまたはマルチCPU Solarisであってもよい。GNU Parallelに大量のコマンドを供給するには?
私は検索コマンドをファイルの配列(ファイルごとに1つのコマンド)として保存します。そして、これは私が(bashのを使用して)今やっていることですが、その後、私は(間違いなく、一度にすべての3660件の検索を開始したくない)並行して起動する方法多くの検索に制御することはできません:
#!/usr/bin/env bash
declare -a cmds
declare -i cmd_ctr=0
while [[ <condition> ]]; do
if [[ -s $cur_archive_path/log.${doy_ctr} ]]; then
cmds[$cmd_ctr]="<cmd_to_run>"
let cmd_ctr++
fi
done
declare -i arr_len=${#cmds[@]}
for ((i=0; i<${arr_len}; i++));
do
# Get the command and run it in background
eval ${cmds[$i]} &
done
wait
parallel
(最大CPU /コアを自動的に把握し、並行して多くの検索を開始する)を使用する場合は、配列cmds
を並列に再利用して上記のコードを書き直すにはどうすればよいですか?他の代替は、ファイルにすべてのコマンドを記述し、その後cat cmd_file | parallel
私の宇宙では、10年連続の閏年がないので、10年は3660ファイルを得ることができません。しかし、あなたが「約」と書いたので、私はあなたがそれを知っていると思って、平行な宇宙(私を少し悲しむ)から私のことを見ていないと仮定します;-) –
@Adrianあなたは正しいです。私は「約」を閏年のアカウントに追加しました:) –