首頁>Computer>source

我想在一个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 完成所有任務,然後由於RAM受限製而产生接下来的8个任務,我無法在一轮中執行全部16个任務。

最新回復
  • 5月前
    1 #

    使用選項 -w--waitsetsid 這樣,setsid命令將等到python程序結束後再結束自身.這意味着外壳 wait 命令現在有等待子程序。

  • 5月前
    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
    

  • 5月前
    3 #

    使用GNU Parallel,它看起来像這樣:

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

  • pivot table:LibreOffice等效於SQL" some_column的count(*)組"
  • linux:几週內未收到有關Ubuntu 2004-wSL 2的更新