lib/paraduct/parallel_runner.rb in paraduct-0.0.1.beta4 vs lib/paraduct/parallel_runner.rb in paraduct-0.0.1.beta5

- old
+ new

@@ -1,59 +1,66 @@ module Paraduct + require "thread/pool" + class ParallelRunner # run script with arguments # @param script [String, Array<String>] script file, script(s) # @param product_variables [Array<Hash{String => String}>] # @return [Paraduct::TestResponse] def self.perform_all(script, product_variables) - threads = [] test_response = Paraduct::TestResponse.new base_job_dir = Paraduct.config.work_dir FileUtils.mkdir_p(base_job_dir) unless base_job_dir.exist? - puts <<-EOS + Paraduct.logger.info <<-EOS ====================================================== START matrix test EOS product_variables.each do |params| - puts "params: #{params}" + Paraduct.logger.info "params: #{params}" end - product_variables.each do |params| - runner = Paraduct::Runner.new( - script: script, - params: params, - base_job_dir: base_job_dir, - ) - threads << Thread.new(runner) do |_runner| - _runner.setup_dir - begin - stdout = _runner.perform - successful = true - rescue Paraduct::ProcessError => e - stdout = e.message - successful = false - end + pool = Thread.pool(Paraduct.config.max_threads) + begin + product_variables.each do |params| + pool.process do + runner = Paraduct::Runner.new( + script: script, + params: params, + base_job_dir: base_job_dir, + ) - puts <<-EOS + runner.setup_dir + begin + stdout = runner.perform + successful = true + rescue Paraduct::Errors::ProcessError => e + stdout = e.message + successful = false + end + + Paraduct.logger.info <<-EOS ====================================================== -params: #{_runner.formatted_params} -job_name: #{_runner.job_name} -job_dir: #{_runner.job_dir} +params: #{runner.formatted_params} +job_name: #{runner.job_name} +job_dir: #{runner.job_dir} -#{stdout} - EOS + #{stdout} + EOS - test_response.jobs_push( - job_name: _runner.job_name, - params: _runner.params, - formatted_params: _runner.formatted_params, - successful: successful, - stdout: stdout, - ) + test_response.jobs_push( + job_name: runner.job_name, + params: runner.params, + formatted_params: runner.formatted_params, + successful: successful, + stdout: stdout, + ) + end end + + ensure + pool.shutdown end - threads.map(&:join) test_response end end end