并行并行

并行并行

我正在尝试并行运行,似乎我遇到了一种情况,这将是一个理想的解决方案。

我想连续运行一组作业 - 将它们称为 A-1、A-2、A-3 等。这些将使用 --jobs 1 (或 sem?) 运行。

我想并行运行这些集合 - 称它们为 A、B、C 等等。这些将以默认数量的作业(核心)运行。

“A”组工作中的工作数量可能与“B”组工作的数量不同;对于 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; B 具有 1、2、3 和 4; 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

相关内容