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 で与えられた数だけスレッドが作られて適宜実行される。この場合、各訪問者に対して行われる処理は独立なのでこの書き方で大丈夫ですね。

(Visited 101 times, 1 visits today)
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*