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