下面的代码应该在 1 秒后引发 Timeout::Error。它不会在 1 秒后升高。它在 url 实际超时后引发。我试图找出原因。
Timeout::timeout(1) { Net::HTTP.get('bogusurlaaaaa.com','index.html') }
$红宝石-v
ruby 1.9.2p320
我没有使用有“绿色线程”问题的 1.8.7。所以我不应该需要 SystemTimer gem
这有效:
Timeout::timeout(1) { sleep(20) }
我的假设是 net/http 使用了一些系统库,而 ruby 超时线程在 1 秒后无法杀死它?只是一个猜测。
任何帮助表示赞赏!我也使用 Mechanize 进行获取,但我相信这使用 net/http 并且遇到了同样的问题。
注意:我通过 irb 在 mac (10.8.2) 和 ubuntu (12.04) 上执行此操作
注意:如果您要多次测试,则需要在每次测试时将 bogusurl 更改为其他内容,否则伪造的 URL 将被缓存,您将获得快速响应。