BLOGTIMES
2009/05/11

Rubyでタイムアウトを実装する

  ruby 
このエントリーをはてなブックマークに追加

Rubyで時間のかかる特定の処理に上限をつける方法を探していたら、そのものずばりtimeoutというクラスをみつけました。

timeout - Rubyリファレンスマニュアル

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

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

使い方も簡単なのでいいですね。ただ、Timeout::ErrorはStandardErroのサブクラスではないので、rescueと書いていないと補足できないということころはハマリやスそうかなという感じです。

require 'timeout' begin timeout(3){ 10.times do |n| puts n sleep 1 end } rescue Timeout::Error puts "Timeout!" end

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3038
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン