情境是这样的:最近在爬某奇葩网站的数据,但该网站的服务器实在让人捉摸不透,有时候直接 ping 不通了,有时候刚能 ping 通,但网页打开一半又断开 / 下载速度奇慢。。。
但我单用 open 方法是无法判断这些情况的,于是程序就可能一直卡在这步。
open
也许各位大大永远不会遇到这种情况,但这个情境可以带来一个一般性的问题:如何在一个程序运行一段时间之后自动终止,无论其是否结束?作为新手,我目前只知道在另一个程序里用 Process.kill 了。。。
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 的。
Timeout::timeout
Timeout::Error
#2 楼 @Lax 感谢。以前没有碰到过这种情境,孤陋寡闻了。
#3 楼 @fanyange 笔误 哈哈~