平行平行

平行平行

並列に実行しようとしていますが、これが理想的なソリューションになる可能性がある状況に達したようです。

一連のジョブを連続的に実行したい(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

おすすめ記事