免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3977 | 回复: 3
打印 上一主题 下一主题

请问如何控制DBI连接mysql超时啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-10 12:55 |只看该作者 |倒序浏览
关于timeout官方只是说:


  1.   eval {
  2.     local $SIG{ALRM} = sub { die "TIMEOUT\n" };
  3.     alarm($seconds);
  4.     ... code to execute with timeout here ...
  5.     alarm(0);  # cancel alarm (if code ran fast)
  6.   };
  7.   alarm(0);    # cancel alarm (if eval failed)
  8.   if ( $@ eq "TIMEOUT\n" ) { ... }
复制代码


但是试过不起作用:


  1. use DBI;
  2. eval {
  3.     local $SIG{ALRM} = sub { die "TIMEOUT\n" };
  4.     alarm(2);
  5.     my $dbh = DBI->connect("DBI:mysql:$db_name:$db_server:$db_port",$db_user, $db_password);
  6.     alarm(0);
  7. };
  8. alarm(0);
  9. if ( $@ eq "TIMEOUT\n" ) { print "timeout\n"; }
复制代码


结果还是等了十几秒才结束执行,且没有打印“timeout”。

论坛徽章:
0
2 [报告]
发表于 2008-02-10 20:23 |只看该作者
有结果了,只是windows下的问题,在linux上没事情。


  1. eval {
  2.     local $SIG{ALRM} = sub { die "TIMEOUT\n" };
  3.     alarm(2);
  4.     sleep(10);
  5.     alarm(0);
  6. };
  7. alarm(0);
  8. if ( $@ eq "TIMEOUT\n" ) { print "timeout\n"; }
复制代码


这样在windows下是有效的,但在换成DBI连接数据库就不起作用了。

另外,

my $dbh = DBI->connect("DBI:mysql:...;mysql_connect_timeout=2"

加上 mysql_connect_timeout=2 也可以控制超时,但在 windows 就不生效。

有什么办法解决在 windows 下也能控制超时吗?

论坛徽章:
0
3 [报告]
发表于 2008-03-05 20:16 |只看该作者
楼主都开始跑起来了,我是连爬都不会啊,我想请问一下,你是怎么在xp下安装DBD::mysql的啊,我怎么总是安装不上啊,非常感谢。。

论坛徽章:
0
4 [报告]
发表于 2008-03-05 22:55 |只看该作者
原帖由 huangruir 于 2008-3-5 20:16 发表
楼主都开始跑起来了,我是连爬都不会啊,我想请问一下,你是怎么在xp下安装DBD::mysql的啊,我怎么总是安装不上啊,非常感谢。。


我下载的是ppm包,很简单的:
http://theoryx5.uwinnipeg.ca/ppms/
国内也有:
http://perl.11138.net/?find=DBD%3A%3Amysql
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP