Gnu-Parallel

有沒有辦法告訴 GNU parallel 在批處理中的所有作業完成之前推遲生成新作業?

  • June 28, 2019

我想並行執行四個程序,但在這四個都完成之前不會產生任何新作業。

編輯:我的命令如下所示:

尋找 。-名稱“*.log”| 並行 -j 4 ‘./process.sh {}’

這個問題最近已被列入郵件列表: https ://lists.gnu.org/archive/html/parallel/2019-06/msg00003.html

簡短的回答是:就像現在的 GNU Parallel 一樣,它無法做到這一點。一個(糟糕的)解決方法在這裡:

https://lists.gnu.org/archive/html/parallel/2019-06/msg00008.html

排隊:

#!/bin/bash

parpar() {
   . `which env_parallel.bash`
   env_parallel --session

   inner() {
       parallel "${command[@]}"
   }
   export -f inner

   command=()
   while [[ $# -gt 0 ]]; do
       if [[ $1 == ",,," ]] ; then
           break
       fi
       command+=("$1")
       shift
   done
   printf "%s\n" "$@" |
       env_parallel --pipe --recend ',,,\n' --rrs -j1 -N1 inner
}

# Example (,,, = wait for completion)
parpar -v sleep {}\; echo {} ,,, 3.9 4 4.1 ,,, 1 2 3 ,,, 0.2 0.3 0.1

引用自:https://unix.stackexchange.com/questions/527282