평행 평행

평행 평행

병렬로 실행하려고 하는데 이것이 이상적인 솔루션이 될 수 있는 상황에 도달한 것 같습니다.

일련의 작업을 연속적으로 실행하고 싶습니다(A-1, A-2, A-3 등). 이는 --jobs 1(또는 sem?)을 사용하여 실행됩니다.

이 컬렉션을 병렬로 실행하고 싶습니다. A, B, C 등으로 부르세요. 이는 기본 작업(코어) 수로 실행됩니다.

그룹 "A"의 작업 수는 그룹 C의 작업 수와 다를 수 있습니다.

시각적으로 가로 축은 시간이고 세로 축은 작업 세트입니다.

A-1--->A-2--->A-3--->
B-1->B-2-->B-3-->B-4--->
C-1-------------C-2--->
D-1------------------>

이를 위해 모든 작업이 $((RANDOM % 10)) 수면 상태에 있다고 가정합니다.

작업 세트와 작업 사이에는 연결이 있어야 한다고 생각합니다(ala --link). 위의 시각적 개체를 사용하면 A에는 1, 2, 3이 있고 C에는 1과 2가 있습니다. D는 단지 1이다.


이것은 아마도 @ole-tang의 솔루션을 사용하여 내가 하려는 일의 더 나은 예일 것입니다.

$ declare -fp apples bananas cherries dates
apples () 
{ 
    echo -n grannysmith fiji pinklady | parallel -d' ' -j1 'echo apples-{#}: {};sleep $((RANDOM % 3))'
}
declare -fx apples
bananas () 
{ 
    echo -n plantain cavadish red manzano | parallel -d' ' -j1 'echo bananas-{#}: {};sleep $((RANDOM % 3))'
}
declare -fx bananas
cherries () 
{ 
    echo -n sweet sour red yellow bing | parallel -d' ' -j1 'echo cherries-{#}: {};sleep $((RANDOM % 3))'
}
declare -fx cherries
dates () 
{ 
    echo -n medjool khola | parallel -d' ' -j1 'echo dates-{#}: {};sleep $((RANDOM % 3))'
}
declare -fx dates
$ parallel ::: apples bananas cherries dates
bananas-1: plantain
bananas-2: cavadish
bananas-3: red
bananas-4: manzano
dates-1: medjool
dates-2: khola
apples-1: grannysmith
apples-2: fiji
apples-3: pinklady
cherries-1: sweet
cherries-2: sour
cherries-3: red
cherries-4: yellow
cherries-5: bing

답변1

a() {
   seq 10 | parallel -j1 'echo A-{#};sleep $((RANDOM % 10))'
}
b() {
   seq 10 | parallel -j1 'echo B-{#};sleep $((RANDOM % 10))'
}
c() {
   seq 10 | parallel -j1 'echo C-{#};sleep $((RANDOM % 10))'
}
d() {
   seq 10 | parallel -j1 'echo D-{#};sleep $((RANDOM % 10))'
}
export -f a b c d

parallel ::: a b c d

출력을 보려면 다음을 수행하십시오.

parallel --lb ::: a b c d

다음과 같이 할 수도 있습니다.

doit() {
    seq 10 | parallel -j1 'echo '$1'-{};sleep $((RANDOM % 10))'
}
export -f doit
parallel --lb doit ::: A B C D

관련 정보