class Multiki
Constants
- VERSION
Public Class Methods
new(tasks, concurrency: 10)
click to toggle source
# File lib/multiki.rb, line 3 def initialize(tasks, concurrency: 10) @concurrency = concurrency @queue = Queue.new self.<< tasks end
Public Instance Methods
<<(tasks)
click to toggle source
# File lib/multiki.rb, line 10 def <<(tasks) [*tasks].each do |task| @queue.push task end end
each(&block)
click to toggle source
# File lib/multiki.rb, line 16 def each(&block) run(&block) end
Private Instance Methods
player() { |call| ... }
click to toggle source
# File lib/multiki.rb, line 34 def player Thread.new do while !@queue.empty? begin task = @queue.pop yield task.call rescue StandardError => e puts "Unhandled error: #{e.inspect}" end end end end
players(&block)
click to toggle source
# File lib/multiki.rb, line 26 def players(&block) threads_number = [@concurrency || @queue.size].max threads_number.times.map do player(&block) end end
run(&block)
click to toggle source
# File lib/multiki.rb, line 22 def run(&block) players(&block).each(&:join) end