timeout(sec) {|i| .... } -> object
[permalink][rdoc] [added by timeout]
timeout(sec, exception_class = nil) {|i| .... } -> object
[added by timeout]
ブロックを sec 秒の期限付きで実行します。ブロックの実行時間が制限を過ぎたときは例外 Timeout::Error が発生します。
exception_class を指定した場合には Timeout::Error の代わりにその例外が発生します。ブロックパラメータ i は sec がはいります。
また sec が 0 もしくは nil のときは制限時間なしでブロックを実行します。
timeout による割り込みは Thread によって実現されています。C 言語レベルで実装され、Ruby のスレッドが割り込めない処理に対して timeout は無力です。そのようなものは実用レベルでは少ないのですが、例をあげると Socket などは DNSの名前解決に時間がかかった場合割り込めません (resolv-replace を使用する必要があります)。その処理を Ruby で実装しなおすか C 側で Ruby のスレッドを意識してあげる必要があります。