ふたまわり位遅れてますが、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 102 times, 1 visits today)