timeout.rb

タイムアウトを行うライブラリ。

定数:

TimeoutError

関数:

timeout(sec) {|i| .... }
timeout(sec, exception_class) {|i| .... } ((<ruby 1.7 feature>))

ブロックを sec 秒の期限付きで実行します。 ブロックの実行時間が制限を過ぎたときは例外 TimeoutError が発生します。 exception_class を指定した場合には TimeoutError の代わりに その例外が発生します。

また secnil のときは制限時間なしで ブロックを実行します。

注意

timeout による割り込みは Thread によって実現されています。C 言語 レベルで実装され、Ruby のスレッドが割り込めない処理*1に対して timeout は無力です。その処理を Ruby で実装しなおすか C 側で Ruby のスレッドを意識してあげる必要があります。 timeoutの落し穴も参照


*1そのような ものは実用レベルでは少ないのですが、例をあげると Socket などは DNSの名前解決に時間がかかった場合割り込めません。 resolv-replace.rb を使用する必要があります



rubyist ML