EventMachineを使って並列処理


このエントリーをはてなブックマークに追加
#! /usr/bin/env ruby
# -*- coding: utf-8; -*-
# em_test.rb
'event machine'


EventMachine.run do
  10.times do |time|
    EM.defer do
      wait = rand(5) / 10.0
      sleep wait
      puts time  
    end
  end
end

rubyで並列処理を行う簡単なコードです。イベント駆動型のフレームワークであるEventMachineを使っています。

実行結果

$ ruby em_test.rb
5
3
8
0
1
4
2
6
7
9

実行された順序と関係なく処理が終わったブロックからすぐに結果を返しているのがわかります。

deferrを使えば最大20個まで並列処理できるようです。nodeのようにシングルスレッドではありませんがプロセスは1つのためプロセスを複数起動するよりリソースの消費は少ないと思います。

参考