Sha256: 31f9c0a65d05c2b65027416c79d861903153a1fa0a5cb8b899c3269e24135abe

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

module Cotcube
  module Helpers

    def parallelize(ary, opts = {}, &block)
      processes =           opts[:processes].nil? ? 1  : opts[:processes]
      threads_per_process = opts[:threads  ].nil? ? 1  : opts[:threads]
      progress =            opts[:progress ].nil? ? "" : opts[:progress]
      chunks = [] 
      if processes == 0 or processes == 1
        r = Parallel.map(ary, in_threads: threads_per_process) {|u| v = yield(u); v}
      elsif [0,1].include?(threads_per_process)
        r = Parallel.map(ary, in_processes: processes) {|u| v = yield(u)}
      else
        ary.each_slice(threads_per_process) {|chunk| chunks << chunk }
        if progress == "" 
          r = Parallel.map(chunks, :in_processes => processes) do |chunk|
            Parallel.map(chunk, in_threads: threads_per_process) do |unit|
              yield(unit) 
            end
          end
        else
          r = Parallel.map(ary, :progress => progress, :in_processes => processes) do |chunk|
            Parallel.map(chunk, in_threads: threads_per_process) do |unit|
              yield(unit)
            end
          end
        end
      end
      return r
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cotcube-helpers-0.1.1 lib/cotcube-helpers/parallelize.rb