3

プロセス全体を遅くしているスクリプトのポイントを見つけようとしています。ファイル内の行を検索して置換するために、expect スクリプトを使用して sed コマンドを送信しています。これが完了するまでに 2 秒から 20 秒かかりますが、1 秒以上かかることはありません。私は2つのターミナルで並行してスクリプトを期待しています。最初のファイルは、launchmpj.exp開始に数秒かかる qsub ジョブを起動します。2 番目のファイルはlaunchneuron.exp、qsub ジョブの開始を待機し、スクリプトを続行します。qsub ジョブが開始されると、 は、2 番目のファイルが qsub ジョブが開始されたことを認識し、待機を停止launchmpj.expできるようにするコマンドを送信します。launchneuron.exp

こちらですlaunchmpj.exp

#!/usr/bin/expect -f
set timeout -1
spawn ssh $::env(username)@server
expect "$ " 
send "qsub -I -q berger -A lc_tb -l nodes=\$nbnodes -l walltime=24:00:00 -d .\r"
expect "$ "
send "cp \$PBS_NODEFILE node`sed -n '1p' nodequeue`\r"
expect "$ "
send "sed -i '/wait=on/ s//wait=off/' `sed -n '1p' qsubwaitqueue`\r"
expect "$ "
send "cd $::env(MPJ_HOME)/bin\r"
expect "$ "
send "sh $::env(MPJLAUNCH)\r"
expect "Process 6 ended"

これが2番目のファイルですlaunchneuron.exp

#!/usr/bin/expect -f
set timeout -1
spawn ssh $::env(username)@server
expect "$ " 
send "set qsubwait = qsub`sed -n '\$p' queue`.sh\r"
expect "$ "
send "sh \$qsubwait\r"
expect "$ " 
send "set nodefile = node`sed -n '1p' nodequeue`\r"
expect "$ "
send "ssh `sed -n '2'p \$nodefile`\r"
expect "$ "
send "cd $::env(NEURON_HOME)\r"
expect "$ " 
send "nrniv -python $::env(NEURONPY)\r"
expect "$ "

プロセスの一環として、sed以下のファイルで置換を実行しています。aloneの実行sedは非常に高速です。つまり、前述のスクリプトのボトルネックにはなりません。ただし、expect スクリプトから実行すると、時間がかかります。

sed -i '/wait=on/ s//wait=off/' qsubwait.sh

ファイルqsubwait.sh:

wait=on
echo "Waiting for qsub to start."
while [ $wait = on ]; do
eval `sed -n '1'p qsubwait.sh`
echo `sed -n '1'p qsubwait.sh`
done
4

1 に答える 1