Creates a worker pool of specified size
@param size [Integer] Size of pool @param func [Proc] job to run in inside the worker pool
# File lib/bundler/parallel_workers/worker.rb, line 17 def initialize(size, func) @request_queue = Queue.new @response_queue = Queue.new prepare_workers size, func prepare_threads size trap("INT") { @threads.each {|i| i.exit }; stop_workers; exit 1 } end
Retrieves results of job function being executed in worker pool
# File lib/bundler/parallel_workers/worker.rb, line 33 def deq result = @response_queue.deq if result.is_a?(WrappedException) raise result.exception end result end
Enqueue a request to be executed in the worker pool
@param obj [String] mostly it is name of spec that should be downloaded
# File lib/bundler/parallel_workers/worker.rb, line 28 def enq(obj) @request_queue.enq obj end
Stop the forked workers and started threads
# File lib/bundler/parallel_workers/worker.rb, line 42 def stop stop_threads stop_workers end
To be overridden by child classes
# File lib/bundler/parallel_workers/worker.rb, line 60 def prepare_threads(size) end
Stop the worker threads by sending a poison object down the request queue so as worker threads after retrieving it, shut themselves down
# File lib/bundler/parallel_workers/worker.rb, line 50 def stop_threads @threads.each do @request_queue.enq POISON end @threads.each do |thread| thread.join end end
To be overridden by child classes
# File lib/bundler/parallel_workers/worker.rb, line 64 def stop_workers end