class Sumac::WorkerPool

Public Class Methods

new(size = 1, duck_types: {}) click to toggle source
# File lib/sumac/worker_pool.rb, line 4
def initialize(size = 1, duck_types: {})
  raise 'Error: worker count invalid' if size < 1
  @thread_class = duck_types[:thread] || Thread
  @semaphore = QuackConcurrency::Semaphore.new(size)
  @threads = []
end

Public Instance Methods

join() click to toggle source
# File lib/sumac/worker_pool.rb, line 29
def join
  @threads.each(&:join)
  nil
end
run(&block) click to toggle source
# File lib/sumac/worker_pool.rb, line 19
def run(&block)
  @semaphore.acquire
  @threads << @thread_class.new do
    block.call
    @threads.delete(@thread_class.current)
    @semaphore.release
  end
  nil
end
size() click to toggle source
# File lib/sumac/worker_pool.rb, line 11
def size
  @semaphore.permit_count
end
size=(new_size) click to toggle source
# File lib/sumac/worker_pool.rb, line 15
def size=(new_size)
  @semaphore.set_permit_count!(new_size)
end