ワシはワシが育てる

週刊少年ジャンプと任天堂のゲームが三度のメシより好きです。

Rubyでマルチスレッド・マルチプロセスのプログラムを書くならParallelが便利

Rubyでは比較的簡単にマルチプロセス、マルチスレッドのプログラミングができますが、それでもやや煩雑な書き方になってしまいます。

それらの処理を簡単に書くためのライブラリとしてparallelがオススメです。
ループの前に少し構文を加えるだけで簡単にマルチな処理が実行できます。

# 普通に書くとこんな感じ
[1, 2, 3, 4, 5, 6].each do |i|
  p i
end

# Parallelを使って処理
Parallel.each([1, 2, 3, 4, 5, 6], in_processes: 6) do |i|
  p i
end

このように先頭にParallelを付けるだけです。

またActiveRecordを使用する際は、スレッド・プロセスが生成される度にデータベース接続を行うとデータベース側でエラーとなってしまうので、Parallelに限らずマルチでの処理では以下のように「ActiveRecord::Base.connection_pool.with_connection」を追加する必要があります。

Parallel.each(User.all, in_processes: 6) do |user|
  ActiveRecord::Base.connection_pool.with_connection do
    user.udpate_attributes(email: 'hoge@hoge.com')
  end
end

データベース構造を変化させる際の一括変換、テストデータの一括生成、クローリングなど重たい処理をする際には非常に使い勝手が良いライブラリです。