首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >expect脚本中的性能瓶颈

expect脚本中的性能瓶颈
EN

Stack Overflow用户
提问于 2013-07-27 07:04:43
回答 1查看 1.8K关注 0票数 3

我正在试图找出我的脚本中减慢了整个过程的点。我使用expect脚本发送sed命令来搜索和替换文件中的一行。这需要2秒到20秒的时间来完成,而它不应该持续超过一秒。我是两个并行在两个终端中的expect脚本。第一个文件launchmpj.exp启动一个qsub作业,该作业需要几秒钟的时间才能启动。第二个文件launchneuron.exp等待qsub作业启动并继续执行脚本。当qsub作业启动时,launchmpj.exp发送一个命令,允许第二个文件launchneuron.exp知道qsub作业启动并停止等待。

这是launchmpj.exp

代码语言:javascript
复制
#!/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"

下面是第二个文件launchneuron.exp

代码语言:javascript
复制
#!/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替换。sed本身的执行速度非常快,这意味着它不是前面提到的脚本中的瓶颈。但是,当从expect脚本完成时,这需要很长时间。

代码语言:javascript
复制
sed -i '/wait=on/ s//wait=off/' qsubwait.sh

文件qsubwait.sh

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-07-27 22:47:23

您是否达到了expect的超时值?使用exp_internal 1运行expect脚本,查看expect正在等待什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17892393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档