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