Sha256: 40f0fb197e093eab18a2389c811b7d96ceb12b4789254f7e4225d688bb406715

Contents?: true

Size: 678 Bytes

Versions: 7

Compression:

Stored size: 678 Bytes

Contents

# frozen_string_literal: true

# Workers poll.
class WorkersPool
  attr_accessor :nb_hits

  def initialize(num_workers = 2)
    @num_workers = num_workers < 2 ? 2 : num_workers
    @queue = SizedQueue.new(num_workers * 2)
    @result = []
    @nb_hits = 0
  end

  def worker(&block)
    @threads = Array.new @num_workers do
      Thread.new do
        until (item = @queue.pop) == :END
          @result << yield(item) if block
        end
      end
    end
  end

  def result
    @threads.each(&:join)
    @result
  end

  def <<(item)
    @queue << item
    self
  end

  def end
    @num_workers.times { @queue << :END }
  end

  # def size
  #   @result.size
  # end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
nistbib-0.1.8 lib/nistbib/workers_pool.rb
nistbib-0.1.7 lib/nistbib/workers_pool.rb
nistbib-0.1.6 lib/nistbib/workers_pool.rb
nistbib-0.1.5 lib/nistbib/workers_pool.rb
nistbib-0.1.2 lib/nistbib/workers_pool.rb
nistbib-0.1.1 lib/nistbib/workers_pool.rb
nistbib-0.1.0 lib/nistbib/workers_pool.rb