Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > timeoutライブラリ > Kernelモジュール > timeout (private)

instance method Kernel#timeout

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 のときは制限時間なしでブロックを実行します。

[PARAM] sec:
タイムアウトする時間を秒数で指定します.
[PARAM] exception_class:
タイムアウトした時、発生させる例外を指定します.

注意

timeout による割り込みは Thread によって実現されています。C 言語レベルで実装され、Ruby のスレッドが割り込めない処理に対して timeout は無力です。そのようなものは実用レベルでは少ないのですが、例をあげると Socket などは DNSの名前解決に時間がかかった場合割り込めません (resolv-replace を使用する必要があります)。その処理を Ruby で実装しなおすか C 側で Ruby のスレッドを意識してあげる必要があります。