0

下面的代码应该在 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 将被缓存,您将获得快速响应。

4

1 回答 1

0

我试过你的代码,它对我有用。我的 ruby​​ 是 1.9.3-p327,你可以更新你的 ruby​​ 版本再试一次。

或者你可以在下面试试这个:

  Net::HTTP.start('bogusurlaaaaa.com', open_timeout: 1, read_timeout: 1){|h| h.get '/'}
于 2013-06-07T02:38:39.823 回答