class Portfinder::Pool
Portfinder
Thread pool
Attributes
result[R]
size[R]
Public Class Methods
new(size)
click to toggle source
# File lib/portfinder/pool.rb 7 def initialize size 8 @pool = [] 9 @size = size 10 @jobs = Queue.new 11 @result = {} 12 @formatter = nil 13 process 14 end
Public Instance Methods
complete_result()
click to toggle source
# File lib/portfinder/pool.rb 16 def complete_result 17 shutdown 18 @result 19 end
result_format(&block)
click to toggle source
# File lib/portfinder/pool.rb 21 def result_format &block 22 @formatter = block 23 end
schedule(*args, &block)
click to toggle source
# File lib/portfinder/pool.rb 25 def schedule *args, &block 26 @jobs << [block, args] 27 end
shutdown(synchronize = true, &callback)
click to toggle source
# File lib/portfinder/pool.rb 29 def shutdown synchronize = true, &callback 30 @size.times do 31 schedule { throw :shutdown } 32 end 33 34 watcher = 35 Thread.fork do 36 @pool.map(&:join) 37 callback.call if callback 38 end 39 40 watcher.join if synchronize 41 end
Private Instance Methods
process()
click to toggle source
# File lib/portfinder/pool.rb 45 def process 46 @pool = Array.new(@size) do 47 Thread.fork do 48 catch :shutdown do 49 loop do 50 job, args = @jobs.pop 51 value = job.call args 52 @result = @formatter.call(@result, args, value) if @formatter 53 end 54 end 55 end 56 end 57 end