Sha256: 059234be5297a8df3d65bc57c9b90b2ffe0ce5bc49340721b64e4fdc5dbcc7dd

Contents?: true

Size: 1017 Bytes

Versions: 2

Compression:

Stored size: 1017 Bytes

Contents

module Workers
  class Pool
    include Workers::Helpers

    DEFAULT_POOL_SIZE = 20

    def initialize(options = {})
      @logger = Workers::LogProxy.new(options[:logger])
      @size = options[:size] || Workers::Pool::DEFAULT_POOL_SIZE
      @worker_class = options[:worker_class] || Workers::Worker

      @input_queue = Queue.new
      @workers = []
      @size.times { @workers << @worker_class.new(:input_queue => @input_queue) }
    end

    def enqueue(command, data = nil)
      @input_queue.push(Event.new(command, data))

      return nil
    end

    def perform(&block)
      enqueue(:perform, block)

      return nil
    end

    def shutdown(&block)
      @size.times { enqueue(:shutdown, block) }

      return nil
    end

    def join(max_wait = nil)
      return @workers.map { |w| w.join(max_wait) }
    end

    def dispose
      shutdown
      join

      return nil
    end

    def inspect
      return "#<#{self.class.to_s}:0x#{(object_id << 1).to_s(16)} size=#{@size}>"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
workers-0.0.9 lib/workers/pool.rb
workers-0.0.8 lib/workers/pool.rb