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