module Celluloid::Pmap

Constants

VERSION

Public Class Methods

ensure_celluloid_running() click to toggle source
# File lib/celluloid/pmap.rb, line 11
def self.ensure_celluloid_running
  celluloid_running = Celluloid.running? rescue false
  Celluloid.boot unless celluloid_running
end
find_loaded_gem(name) click to toggle source
# 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) click to toggle source
# File lib/celluloid/pmap.rb, line 35
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_class() click to toggle source
# File lib/celluloid/pmap.rb, line 16
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'
    require 'celluloid/autostart'
    ensure_celluloid_running
    Celluloid::PoolManager
  elsif celluloid_version[0].to_i == 0 && celluloid_version[1].to_i < 18
    require 'celluloid/current'
    ensure_celluloid_running
    Celluloid::Supervision::Container::Pool
  else
    require 'celluloid'
    require 'celluloid/pool'
    ensure_celluloid_running
    Celluloid::Supervision::Container::Pool
  end
end

Public Instance Methods

pmap(pool_or_size=Celluloid.cores, &block) click to toggle source
# File lib/celluloid/pmap.rb, line 38
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