class Parapool
Constants
- VERSION
Attributes
pool_size[R]
Public Class Methods
new(pool_size = 4)
click to toggle source
# File lib/parapool.rb, line 11 def initialize(pool_size = 4) raise ArgumentError, 'Pool size must be greater than or equal to 1.' if pool_size < 1 @pool_size = pool_size @queue = Queue.new @workers = [] create_worker end
Public Instance Methods
map(params, &block)
click to toggle source
# File lib/parapool.rb, line 21 def map(params, &block) raise TypeError, "wrong argument type #{params.class} (expected Enumerable)" unless params.is_a?(Enumerable) raise Parapool::Error, 'must be called with a block' unless block_given? return if params.empty? sync = Synchronizer.new(params.size) jobs = [] params.each do |param| job = Job.new(param, sync, &block) push(job) jobs << job end sync.wait jobs.map { |job| job.result } end
release()
click to toggle source
# File lib/parapool.rb, line 41 def release @workers.size.times.each do @queue.push(nil) end @workers.each do |worker| worker.join end end
Private Instance Methods
create_worker()
click to toggle source
# File lib/parapool.rb, line 52 def create_worker @pool_size.times do worker = Worker.new(@queue) worker.run @workers << worker end end
push(job)
click to toggle source
# File lib/parapool.rb, line 60 def push(job) raise TypeError, "wrong argument type #{job.class} (expected Parapool::Job)" unless job.is_a?(Job) @queue.push(job) self end