有没有办法告诉 GNU Parallel 推迟生成新作业,直到批次中的所有作业完成为止?

有没有办法告诉 GNU Parallel 推迟生成新作业,直到批次中的所有作业完成为止?

我想并行运行四个进程,但在这四个进程全部完成之前不会生成任何新作业。

编辑:我的命令如下所示:

寻找 。 -名称“*.log” |并行-j 4 './process.sh {}'

答案1

这个问题最近已被添加到邮件列表中: 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

相关内容