与预定义的顺序优先级并行运行bash作业
我想在一台超过2个内核的机器的2个内核上运行3个作业(A、B、C)。我知道: 运行时(A)>运行时(C) 运行时(B)>运行时(C) 在Bash 4.3(2014年发布)或更高版本中,运行时(A)>运行时(B)或运行时(A)是否容易,事先还不知道:与预定义的顺序优先级并行运行bash作业,bash,shell,gnu-parallel,Bash,Shell,Gnu Parallel,我想在一台超过2个内核的机器的2个内核上运行3个作业(A、B、C)。我知道: 运行时(A)>运行时(C) 运行时(B)>运行时(C) 在Bash 4.3(2014年发布)或更高版本中,运行时(A)>运行时(B)或运行时(A)是否容易,事先还不知道: A & B & wait -n # wait for any child to finish C & wait # for everyone to finish 只需告诉GNU Parallel它可以使用2个内核: para
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
参数以保持输出有序。欢迎使用堆栈溢出。该平台面向软件开发人员。您忘了在问题中添加您自己试图解决的问题。@Cyrus鼓励您尝试,但不是必需的。sleep 5;回声“A”和睡眠10;echo“B”和wait-n和sleep 5;echo“C”和wait运行时间为20秒,我预计为10秒。A和B是按顺序执行的,不是吗?sleep 5代码>执行该命令,然后等待,因此您的示例存在错误。尝试编写一个名为a
的脚本或函数,并将sleep5
放入其中,然后使用我给出的代码。谢谢,你说得对。虽然我将使用GNU并行解决方案(稍微易于扩展和维护),但您的解决方案非常漂亮,我非常喜欢!太棒了,这很有效,gnu parallel尊重秩序是有道理的。我之前拒绝并行,因为我的印象是输出的顺序和执行的顺序相同。但是,我想只有当不同线程上的作业在同一时间结束时才会出现这种情况。很高兴它对你有用——请点击点击计数旁边的嘀嗒/支票来接受它。非常感谢。