Shell 如何分配循环以在每个核心上运行一次迭代
我正在一台30核的服务器上运行一个shell脚本中的半大型循环。它看起来像下面的那个。我希望将此循环分发给每个核心运行一次迭代: python sim_fine.py model1在核心1上弱a真-->时,Shell 如何分配循环以在每个核心上运行一次迭代,shell,loops,parallel-processing,Shell,Loops,Parallel Processing,我正在一台30核的服务器上运行一个shell脚本中的半大型循环。它看起来像下面的那个。我希望将此循环分发给每个核心运行一次迭代: python sim_fine.py model1在核心1上弱a真-->时, 核心2上的python sim_fine.py model1弱b真--> 等等 我想利用30个核心中的20个来完成他的过程。基本上我想要的是迭代不要等到上一个完成,然后再开始下一个。当然,这种情况可能只发生20次。我一直在网上搜索,但在这个话题上找不到任何帮助 for m in model1
核心2上的python sim_fine.py model1弱b真-->
等等 我想利用30个核心中的20个来完成他的过程。基本上我想要的是迭代不要等到上一个完成,然后再开始下一个。当然,这种情况可能只发生20次。我一直在网上搜索,但在这个话题上找不到任何帮助
for m in model1 model2;
do
for s in weak strong;
do
for opt_dict in a b c d;
do
python sim_fine.py $m $s $opt_dict true
done
done
done
我会使用GNU Parallel,尽管它似乎只产生16个工作岗位,而不是您指出的20个:
parallel --dry-run python sim.py ::: model{1,2} ::: weak strong ::: {a..d}
样本输出
python sim.py model1 weak a
python sim.py model1 weak b
python sim.py model1 weak c
python sim.py model1 weak d
python sim.py model1 strong a
python sim.py model1 strong b
python sim.py model1 strong c
python sim.py model1 strong d
python sim.py model2 weak a
python sim.py model2 weak b
python sim.py model2 weak c
python sim.py model2 weak d
python sim.py model2 strong a
python sim.py model2 strong b
python sim.py model2 strong c
python sim.py model2 strong d
如果看起来不错,请认真运行,不要使用--干运行。如果确实要将并行作业数限制为20,请使用:
parallel -j 20 ...
如果您运行manparallel
,则有许多非常灵活的选项用于处理日志记录、报告和错误处理
我在参数处理方面有些懒惰/简洁,您可以更明确地使用:
parallel --dry-run python sim.py {1} something {2} somethingelse {3} true ::: model{1,2} ::: weak strong ::: {a..d}
谢谢你,马克!!是的,我缩短了循环以减少混乱,然后我设法进行了20次以下的迭代。我的错!当我运行这个程序时,我现在会收到一个错误,上面写着:“/bin/bash:sim.py:Permission denied”。你知道为什么会发生这种情况吗?对不起,我复制得不好,你想要sim\u fine.py
Ohh这不是因为名称错误。可能是因为缺少“$”。我解决了问题。这是因为我的本地服务器受到一些限制。再次感谢你!我感谢你的帮助!