배치의 모든 작업이 완료될 때까지 새 작업 생성을 연기하도록 GNU Parallel에 지시하는 방법이 있습니까?

배치의 모든 작업이 완료될 때까지 새 작업 생성을 연기하도록 GNU Parallel에 지시하는 방법이 있습니까?

4개의 프로세스를 병렬로 실행하고 싶지만 4개의 ​​프로세스가 모두 완료될 때까지 새 작업이 생성되지 않습니다.

편집: 내 명령은 다음과 같습니다.

찾다. -name '*.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

관련 정보