Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'rubygems'
- require 'eventmachine'
- require 'enumerator'
- module EventMachine
- # Iteration helpers for asynchronous code
- module Iterator
- def self.mapreduce(enum, map = nil, reduce = nil)
- if enum.any?
- num = enum.size
- results = []
- iterator = nil
- done = proc{ |r|
- results << r
- if (num -= 1) == 0
- reduce.call(results)
- else
- iterator.call
- end
- }
- iterator = proc{
- entry = enum.shift
- map.call(entry, done)
- }
- iterator.call
- end
- end
- end
- end
- EM.run do
- EM::Iterator.mapreduce([1,2,3], proc{ |n, done|
- EM.add_timer(1){
- done.call([n+1, Time.now])
- }
- }, proc{ |results|
- p results
- })
- end
Add Comment
Please, Sign In to add comment