我有很多工作要運行,比方說100.他們可以並行運行,但每個工作都佔用大量內存,所以我只能同時運行8個。總共運行N個作業,其中M個任意時間並行運行
我現在有這個shell腳本:
(
(python run.py $arg1 &)
(python run.py $arg2 &)
(python run.py $arg3 &)
(python run.py $arg4 &)
(python run.py $arg5 &)
(python run.py $arg6 &)
(python run.py $arg7 &)
(python run.py $arg8 &)
) 2>&1 | cat -u
(
(python run.py $arg9 &)
(python run.py $arg10 &)
(python run.py $arg11 &)
(python run.py $arg12 &)
(python run.py $arg13 &)
(python run.py $arg14 &)
(python run.py $arg15 &)
(python run.py $arg16 &)
) 2>&1 | cat -u
...
這有運行首批8的效果,而當他們已經全部結束,它開始的8下一批次的問題是,每個作業的運行時間並不是一成不變的,而有些則在其他人之前完成,因此,對於每批8個工作要完成的權重並不是最優的,因爲我正在等待8個工作中最慢的工作。
相反,我想有一個腳本(殼或Python),將運行我所有的100個職位,在任何給定的時間讓他們的8並行,以達到最佳效率。
任何關於實現這一點的想法?
'cat -u'應該做什麼?根據[手冊頁](http://unixhelp.ed.ac.uk/CGI/man-cgi?cat)-u被忽略。 –
@NickODell TBH我從某處複製了這個腳本,所以我不確定。我的男人顯示了不同的東西:「-u禁用輸出緩衝。」 – Greystache