Bash
Bash 連續和並行循環/命令
我想使用我製作的 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 MByteparallel --memfree 256M python <etc.>
請注意,如果記憶體低於規定的“保留”值的 50%,最後一個選項將終止最近啟動的作業(但它會自動重新排隊以進行追趕)。