我正在尝试并行运行,似乎我遇到了一种情况,这将是一个理想的解决方案。
我想连续运行一组作业 - 将它们称为 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