【发布时间】:2013-05-07 19:18:33
【问题描述】:
我正在评估GNU Parallel 是否可用于搜索并行存储在系统上的文件。系统上一年中的每一天 (doy) 只能有一个文件(因此每年最多有 366 个文件)。假设系统上有 3660 个文件(大约 10 年的数据)。系统可以是多CPU多核Linux或多CPU Solaris。
我正在存储要在数组中的文件上运行的搜索命令(每个文件一个命令)。这就是我现在正在做的事情(使用 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(它会自动计算出最大CPUs/cores 并且只开始并行搜索这么多),我如何才能并行重用数组cmds 并重写上面的代码?另一种选择是将所有命令写入文件,然后执行cat cmd_file | parallel
【问题讨论】:
-
学究起来,在我的宇宙中,10 年不能产生 3660 个文件,因为不可能有 10 个连续的闰年。但既然你写了“关于”,我假设你知道这一点,并且不要从平行宇宙中瞥见我的(这让我有点难过);-)
-
@Adrian 你是对的;我添加了“关于”来说明闰年:)
标签: bash parallel-processing gnu-parallel