新手问题 如何在一定时间内读不完某个链接的时候中断程序

fanyange · 2013年09月02日 · 最后由 zj0713001 回复于 2013年09月02日 · 2541 次阅读

情境是这样的:最近在爬某奇葩网站的数据,但该网站的服务器实在让人捉摸不透,有时候直接 ping 不通了,有时候刚能 ping 通,但网页打开一半又断开 / 下载速度奇慢。。。

但我单用 open 方法是无法判断这些情况的,于是程序就可能一直卡在这步。

也许各位大大永远不会遇到这种情况,但这个情境可以带来一个一般性的问题:如何在一个程序运行一段时间之后自动终止,无论其是否结束?作为新手,我目前只知道在另一个程序里用 Process.kill 了。。。

Timeout::timeout(60) do
  #your code like Mechanize.new.get
  rescue Timeout::Error
  #rescue code
end

curl 有 timeout 选项,其它库应该也有类似的参数。

#1 楼 @zj0713001 十分感谢,已解决。不过应该是这样吧?

begin
  Timeout::timeout(60) do
    #your code like Mechanize.new.get
  end
rescue Timeout::Error
  #rescue code
end

感觉在 Timeout::timeout 内部是不会捕捉到 Timeout::Error 的。

#2 楼 @Lax 感谢。以前没有碰到过这种情境,孤陋寡闻了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号