顺序并行等待

顺序并行等待

我想在一个 bash 文件中运行多并行任务,如下面的示例代码,

for i in 1 2 3 4 5 6 7 8; do
        setsid python /tmp/t.py ${i} 1>>/tmp/1.log 2>&1 &
done
wait  # first wait

echo "next wait"
for i in 9 10 11 12 13 14 15 16; do
        setsid python /tmp/t.py ${i} 1>>/tmp/1.log 2>&1 &
done
wait  # second wait

如您所见,wait可以这样做吗?我想先运行前 8 个任务,然后wait完成所有任务,然后生成接下来的 8 个任务,因为 RAM 有限,我无法在一轮中运行所有 16 个任务。

答案1

使用选项-w或,--wait以便setsidsetsid 命令等待 python 进程结束后再结束自身。这意味着 shellwait命令现在有子进程需要等待。

答案2

像这样:

set -a pids
for i in {1..8}
do
  python /tmp/t.py ${i} 1>>/tmp/1.log 2>&1 &
  pids[${#pids[*]}]=$!  # Remember pid of child
done

# Wait for each child. This loops exits when all children are finished
for pid in ${pids[*]} 
do
  wait $pid
  printf "Sensed end of %d\n" $pid
done

### Continue processing here

答案3

使用 GNU Parallel 它看起来像这样:

parallel -j8 setsid python /tmp/t.py {} ::: {1..16} > log

相关内容