Sha256: 939f5236cdcce4d180bf8294a735397d56732ae1f9ee5eab70bf69854be89856

Contents?: true

Size: 1.8 KB

Versions: 7

Compression:

Stored size: 1.8 KB

Contents

module Mutant
  # Parallel excecution engine of arbitrary payloads
  module Parallel

    # Driver for parallelized execution
    class Driver
      include Concord.new(:binding)

      # Return scheduler status
      #
      # @return [Object]
      #
      # @api private
      #
      def status
        binding.call(__method__)
      end

      # Stop master gracefully
      #
      # @return [self]
      #
      # @api private
      #
      def stop
        binding.call(__method__)
        self
      end
    end # Driver

    # Run async computation returing driver
    #
    # @return [Driver]
    #
    # @api private
    #
    def self.async(config)
      Driver.new(config.env.new_mailbox.bind(Master.call(config)))
    end

    # Job result sink
    class Sink
      include AbstractType

      # Process job result
      #
      # @param [Object]
      #
      # @return [self]
      #
      # @api private
      #
      abstract_method :result

      # Return status
      #
      # @return [Object]
      #
      # @api private
      #
      abstract_method :status

      # Test if processing should stop
      #
      # @return [Boolean]
      #
      # @api private
      #
      abstract_method :stop?
    end # Sink

    # Job to push to workers
    class Job
      include Adamantium::Flat, Anima.new(:index, :payload)
    end # Job

    # Job result object received from workers
    class JobResult
      include Adamantium::Flat, Anima.new(:job, :payload)
    end # JobResult

    # Parallel run configuration
    class Config
      include Anima::Update, Adamantium::Flat, Anima.new(:env, :processor, :source, :sink, :jobs)
    end # Config

    # Parallel execution status
    class Status
      include Adamantium::Flat, Anima::Update, Anima.new(:payload, :done, :active_jobs)
    end

  end # Parallel
end # Mutant

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mutant-0.8.0 lib/mutant/parallel.rb
mutant-0.7.9 lib/mutant/parallel.rb
mutant-0.7.8 lib/mutant/parallel.rb
mutant-0.7.7 lib/mutant/parallel.rb
mutant-0.7.6 lib/mutant/parallel.rb
mutant-0.7.5 lib/mutant/parallel.rb
mutant-0.7.4 lib/mutant/parallel.rb