Module: Timeout

Module | Timeout
In: | timeout.rb

# timeout.rb

execution timeout

# Synopsis

      require 'timeout'
      status = Timeout::timeout(5) {
        # Something that should be interrupted if it takes too much time...
      }

# Description

A way of performing a potentially long-running operation in a thread, and terminating it’s execution if it hasn’t finished by a fixed amount of time.

Previous versions of timeout didn’t provide use a module for namespace. This version provides both Timeout.timeout, and a backwards-compatible timeout.

# Copyright

Copyright: | (C) 2000 Network Applied Communication Laboratory, Inc.
Copyright: | (C) 2000 Information-technology Promotion Agency, Japan

### Methods

timeout

### Classes and Modules

Class Timeout::Error

### Public Instance methods

timeout(sec, exception=Error) {|if sec == nil or sec.zero?| ...}

Executes the method’s block. If the block execution terminates before `sec` seconds has passed, it returns true. If not, it terminates the execution and raises `exception` (which defaults to Timeout::Error).

Note that this is both a method of module Timeout, so you can ‘include Timeout’ into your classes so they have a timeout method, as well as a module method, so you can call it directly as Timeout.timeout().

[Source]

    # File timeout.rb, line 37
      def timeout(sec, exception=Error)
        return yield if sec == nil or sec.zero?
        begin
          x = Thread.current
          y = Thread.start {
            sleep sec
            x.raise exception, "execution expired" if x.alive?
          }
          yield sec
          #    return true
        ensure
          y.kill if y and y.alive?
        end
      end

[Validate]