free_mutant/lib/mutant/parallel.rb
2018-09-12 13:15:43 +00:00

93 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module Mutant
# Parallel execution engine of arbitrary payloads
module Parallel
# Driver for parallelized execution
class Driver
include Concord.new(:binding)
# Scheduler status
#
# @return [Object]
def status
binding.call(__method__)
end
# Stop master gracefully
#
# @return [self]
def stop
binding.call(__method__)
self
end
end # Driver
# Run async computation returning driver
#
# @return [Driver]
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]
abstract_method :result
# Sink status
#
# @return [Object]
abstract_method :status
# Test if processing should stop
#
# @return [Boolean]
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 Adamantium::Flat, Anima.new(
:env,
:jobs,
:processor,
:sink,
:source
)
end # Config
# Parallel execution status
class Status
include Adamantium::Flat, Anima.new(
:active_jobs,
:done,
:payload
)
end # Status
end # Parallel
end # Mutant