【问题标题】:"&" in for loop in bash shell [duplicate]bash shell中for循环中的“&”[重复]
【发布时间】:2021-05-13 07:10:14
【问题描述】:

我正在使用 & 在 bash shell 脚本的 for 循环中一起运行多个程序

例如,

for ((i=1;i<=45;i=i+1))
do
    
    python pythonfile.py --gpu 4 --seed ${i} &
    python pythonfile.py --gpu 4 --seed ${i} &
    python pythonfile.py --gpu 5 --seed ${i} &
    python pythonfile.py --gpu 5 --seed ${i} &
    python pythonfile.py --gpu 6 --seed ${i} &
    python pythonfile.py --gpu 6 --seed ${i} &
    python pythonfile.py --gpu 3 --seed ${i} &
    python pythonfile.py --gpu 3 --seed ${i} 


done

我没有在最后一句中加上 &, 因为如果我一起运行 &... 45*8 个程序会很糟糕

但它运行的程序仍然多于 8 个程序。

为什么会出现这个问题?

【问题讨论】:

  • 这可能是 GNU 并行的工作?

标签: bash shell loops


【解决方案1】:

这可能对你有用(GNU 并行):

parallel -j8 python pythonfile.py --gpu {2} --seed ${1} ::: {1..45} ::: 4 4 5 5 6 6 3 3

一次运行 8 个作业,总共 360 个。

【讨论】:

  • 感谢您回答问题!我不知道这种方式,它更有效。谢谢
【解决方案2】:

您必须wait 才能完成后台作业,然后才能开始另一个迭代:

for ((i=1;i<=45;i=i+1))
do    
    python pythonfile.py --gpu 4 --seed ${i} &
    python pythonfile.py --gpu 4 --seed ${i} &
    python pythonfile.py --gpu 5 --seed ${i} &
    python pythonfile.py --gpu 5 --seed ${i} &
    python pythonfile.py --gpu 6 --seed ${i} &
    python pythonfile.py --gpu 6 --seed ${i} &
    python pythonfile.py --gpu 3 --seed ${i} &
    python pythonfile.py --gpu 3 --seed ${i} &
    wait
done

wait 是一个内置的 shell,顺便说一下,在你的 shell 中运行 help wait 以获得帮助页面。

【讨论】:

  • 不客气!
猜你喜欢
  • 2019-04-09
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2020-01-06
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多