Bash

Bash 連續和並行循環/命令

  • March 13, 2020

我想使用我製作的 Python 工具執行一些模擬。問題是我必須使用不同的參數/參數和所有內容多次呼叫它。

現在,我正在for為該任務使用多個循環,例如:

for simSeed in 1 2 3 4 5
do
   for launchPower in 17.76 20.01 21.510 23.76
   do
       python sim -a $simSeed -p $launchPower
   done
done

為了使模擬同時執行,我&在呼叫模擬器的行的末尾附加了一個。

python sim -a $simSeed -p $launchPower &

使用這種方法,我可以執行多個這樣的種子。但是,由於我的電腦記憶體有限,我想重新編寫上面的腳本,以便它並行啟動內循環和順序啟動for外循環。for

例如,對於simSeed = 1,我希望 5 個不同的程序以launchPower等於執行17.76 20.01 21.510 23.76。一旦這部分完成,我希望腳本simSeed = 2再次執行 5 個不同的並行程序,launchPower等於17.76 20.01 21.510 23.76.

我怎樣才能完成這項任務?

TLDR:

我希望外循環按順序執行,內循環並行執行,這樣當內循環的最後一個並行過程完成時,外循環移動到下一次迭代。

GNU 並行有幾個選項可以在並行啟動作業時限制資源使用。

兩個嵌套循環的基本用法是

parallel python sim -a {1} -p {2} ::: 1 2 3 4 5 ::: 17.76 20.01 21.510 23.76

如果您想同時啟動最多 5 個工作,例如,您可以說

parallel -j5 python <etc.>

或者,您可以使用該--memfree選項僅在有足夠記憶體可用時開始新作業,例如至少 256 MByte

parallel --memfree 256M python <etc.>

請注意,如果記憶體低於規定的“保留”值的 50%,最後一個選項將終止最近啟動的作業(但它會自動重新排隊以進行追趕)。

引用自:https://unix.stackexchange.com/questions/572695