class Minions::Perform

Attributes

max[R]
work_packages[R]

Public Class Methods

in_parallel(*args, &block) click to toggle source
# File lib/minions/perform.rb, line 9
def self.in_parallel(*args, &block)
  new(*args, &block).send(:in_parallel)
end
new(work_packages, max:, &block) click to toggle source
# File lib/minions/perform.rb, line 3
def initialize(work_packages, max:, &block)
  @work_packages = work_packages
  @max = [max, work_packages.length].min
  @work_block = block
end

Private Instance Methods

in_parallel() click to toggle source
# File lib/minions/perform.rb, line 17
def in_parallel
  (0...max).map do
    Thread.new do
      begin
        while package = work_queue.pop(true)
          @work_block.call(package)
        end
      rescue ThreadError
        # The queue is empty
      end
    end
  end.map(&:join)
end
work_queue() click to toggle source
# File lib/minions/perform.rb, line 31
def work_queue
  @_work_queue ||= begin
    queue = Queue.new
    work_packages.each { |package| queue << package }
    queue
  end
end