module Bucky::Core::TestCore::ParallelHelper
Private Instance Methods
parallel_distribute_into_workers(data_set, max_processes, &block)
click to toggle source
# File lib/bucky/core/test_core/test_manager.rb, line 45 def parallel_distribute_into_workers(data_set, max_processes, &block) # Group the data by remainder of index data_set_grouped = data_set.group_by.with_index { |_elem, index| index % max_processes } # Use 'values' method to get only hash's key into an array data_set_grouped.values.each do |data_for_pre_worker| # Number of child process is equal to max_processes (or equal to data_set length when data_set length is less than max_processes) fork do data_for_pre_worker.each { |data| block.call(data) } end end # Handle all exit code in waitall Process.waitall.each do |child| Bucky::Core::TestCore::ExitHandler.instance.raise unless child[1].exitstatus.zero? end end
parallel_new_worker_each(data_set, max_processes, &block)
click to toggle source
# File lib/bucky/core/test_core/test_manager.rb, line 22 def parallel_new_worker_each(data_set, max_processes, &block) # Max parallel workers number available_workers = max_processes # If child process dead, available workers increase Signal.trap('CLD') { available_workers += 1 } data_set.each do |data| # Wait until worker is available and handle exit code from previous process unless available_workers.positive? Process.wait Bucky::Core::TestCore::ExitHandler.instance.raise unless $CHILD_STATUS.exitstatus.zero? end # Workers decrease when start working available_workers -= 1 fork { block.call(data) } end # Handle all exit code in waitall Process.waitall.each do |child| Bucky::Core::TestCore::ExitHandler.instance.raise unless child[1].exitstatus.zero? end end