並列に実行しようとしていますが、これが理想的なソリューションになる可能性がある状況に達したようです。
一連のジョブを連続的に実行したい(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