Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | parallelライブラリで並列処理を実装

概要

parallelライブラリで並列処理を実装

詳細

paralleライブラリを利用することで並列実行が可能です

インストール
gem install parallel

サンプル

# encoding: utf-8
require 'pp'
require 'parallel'
require "benchmark"

def _benchmark(&block)
  return unless block_given?
  ret = Benchmark.measure(&block)
  puts "#{ret.to_s}"
end

sleep_proc = Proc.new { sleep 1 }
sleeps = [sleep_proc, sleep_proc, sleep_proc, sleep_proc, sleep_proc]

def single_execute(blocks)
  blocks.each do |block|
    block.call
    puts __callee__
  end
end

def parallel_execute(blocks)
  Parallel.each(blocks, in_threads: 5)  do |block|
    block.call
    puts __callee__
  end
end

_benchmark() {single_execute(sleeps)}
_benchmark() {parallel_execute(sleeps)}

出力

single_execute
single_execute
single_execute
single_execute
single_execute
  0.000000   0.000000   0.000000 (  5.000286)
parallel_execute
parallel_execute
parallel_execute
parallel_execute
parallel_execute
  0.000000   0.000000   0.000000 (  1.001057)