私はSage MATHで書かれたプログラムの実行を並列化し自動化するために単純なBashスクリプトを実行しています。
#!/bin/bash
for i in {1..500}; do
echo Spinning up threads...
echo Round $i
for j in {1..8}; do
../sage ./loader.sage.py &
done
wait
done 2>/dev/null
各スレッドで5秒後にタイムアウトを追加したいと思います。
../sage ./loader.sage.py &
タイムアウトしてスレッドを終了し、実行を続行します。どうすればいいですか?これが愚かな質問であれば、事前に謝罪します。構文を正しく理解できないようです。 Ubuntu WSLで実行しています。私が呼び出したプログラムはPythonで書かれており、Singularと連携してSage MATHインタプリタを介して実行されました。
ベストアンサー1
GNU並列処理を使用する:
parallel --timeout 5 -j 8 -N0 ../sage ./loader.sage.py ::: {1..4000} 2>/dev/null
../sage ./loader.sage.py
これは一度に8つのジョブを4000回実行し、各タイムアウトは5秒です。
並列マニュアルページから:
--timeout duration
Time out for command. If the command runs for longer than duration seconds it will get killed as per --termseq.
注:このコマンドはループ全体を置き換えます。