読者です 読者をやめる 読者になる 読者になる

Ruby gem 'parallel' で並列処理

プログラム

ふたまわり位遅れてますが、gemライブラリのparallelを使うと並列処理が簡単に書けて便利。
例として、とあるグループ別に記録されている訪問ログに対して各訪問者別の処理をする場合、以下の様な具合でかける。

require 'parallel'

processor_count = Parallel.processor_count #CPUコア数取得

Group.select(:id).each do |group|
  visitors = Visitlog.select(:visitor).uniq.where(:group_id => group.id)

  Parallel.each(visitors, in_threads: processor_count) do |visitor|
    visitor_process(group.id, visitor.id)
  end
end

Parallel.each の箇所で引数の in_threads で与えられた数だけスレッドが作られて適宜実行される。この場合、各訪問者に対して行われる処理は独立なのでこの書き方で大丈夫ですね。