【发布时间】:2013-06-07 02:18:12
【问题描述】:
下面的代码应该在 1 秒后引发 Timeout::Error。它不会在 1 秒后升高。它在 url 实际超时后引发。我正在尝试找出原因。
Timeout::timeout(1) { Net::HTTP.get('bogusurlaaaaa.com','index.html') }
$ ruby -v
ruby 1.9.2p320
我没有使用有“绿色线程”问题的 1.8.7。所以我不应该需要 SystemTimer gem
这行得通:
Timeout::timeout(1) { sleep(20) }
我的假设是 net/http 使用了一些系统库,而 ruby 超时线程无法在 1 秒后杀死它?只是猜测。
感谢任何帮助!我也使用 Mechanize 进行获取,但我相信这使用了 net/http 并且遇到了同样的问题。
注意:我在 mac (10.8.2) 和 ubuntu (12.04) 上都通过 irb 执行此操作
注意:如果您要多次测试,则需要在每次测试时将伪造的 URL 更改为其他内容,否则伪造的 URL 将被缓存,您将得到快速响应。
【问题讨论】:
-
你试过在 ruby 2.0.0 上运行吗?
-
是的,我的 ubuntu 实例使用 ruby -v ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
-
试试“www.youtube.com”。我以为是因为网址不好
标签: ruby