运行 bash 个作业与预定义的顺序优先级并行
Running bash jobs in parallel with predefined order prioritization
我想 运行 在具有 >2 个内核的机器的 2 个内核上执行 3 个作业(A、B、C)。我知道:
运行时间(A)>运行时间(C)
运行时间(B)>运行时间(C)
如果运行time(A)>运行time(B) or 运行time(A)<运行time(B) .
我想做的是:
- 在核心 1 上启动 A
- 在核心 2 上启动 B
- 任一完成后,在一个空闲核心上启动 C
如何实现(如果可能,在 bash 中)?
在 Bash 4.3(2014 年发布)或更高版本中很容易:
A &
B &
wait -n # wait for any child to finish
C &
wait # for everyone to finish
只需告诉 GNU Parallel 它可以使用 2 个内核:
parallel -j 2 ::: jobA jobB jobC
请注意,作业将按您指定的顺序 运行,但输出的顺序可能不同。如果这是一个问题,请添加 -k
参数以保持输出顺序。
我想 运行 在具有 >2 个内核的机器的 2 个内核上执行 3 个作业(A、B、C)。我知道:
运行时间(A)>运行时间(C)
运行时间(B)>运行时间(C)
如果运行time(A)>运行time(B) or 运行time(A)<运行time(B) .
我想做的是:
- 在核心 1 上启动 A
- 在核心 2 上启动 B
- 任一完成后,在一个空闲核心上启动 C
如何实现(如果可能,在 bash 中)?
在 Bash 4.3(2014 年发布)或更高版本中很容易:
A &
B &
wait -n # wait for any child to finish
C &
wait # for everyone to finish
只需告诉 GNU Parallel 它可以使用 2 个内核:
parallel -j 2 ::: jobA jobB jobC
请注意,作业将按您指定的顺序 运行,但输出的顺序可能不同。如果这是一个问题,请添加 -k
参数以保持输出顺序。