Module: Celluloid::Pmap

Included in:
Enumerable
Defined in:
lib/celluloid/pmap.rb,
lib/celluloid/pmap/version.rb,
lib/celluloid/pmap/parallel_map_worker.rb

Defined Under Namespace

Classes: ParallelMapWorker

Constant Summary collapse

VERSION =
"0.2.2"

Class Method Summary collapse

Class Method Details

.find_loaded_gem(name) ⇒ Object



7
8
9
# File 'lib/celluloid/pmap.rb', line 7

def self.find_loaded_gem(name)
  Gem.loaded_specs.values.detect{|repo| repo.name == name }
end

.included(base) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/celluloid/pmap.rb', line 22

def self.included(base)
  base.class_eval do

    def pmap(pool_or_size=Celluloid.cores, &block)
      pool = if pool_or_size.class.ancestors.include?(Celluloid::Pmap.pool_class)
        pool_or_size
      else
        Pmap::ParallelMapWorker.pool(size: pool_or_size)
      end
      futures = map { |elem| pool.future(:yielder, elem, block) }
      futures.map { |future| future.value }
    end

  end
end

.pool_classObject



11
12
13
14
15
16
17
18
19
20
# File 'lib/celluloid/pmap.rb', line 11

def self.pool_class
  celluloid_version = find_loaded_gem("celluloid").version.to_s.split('.')
  if celluloid_version[0].to_i == 0 && celluloid_version[1].to_i <= 16
    require 'celluloid'
    Celluloid::PoolManager
  else
    require 'celluloid/current'
    Celluloid::Supervision::Container::Pool
  end
end