Sha256: 83bbeb31d13b67243f4f2cbf20d9b002c4f4f723412316bed289c895c11dcd05
Contents?: true
Size: 1.47 KB
Versions: 5
Compression:
Stored size: 1.47 KB
Contents
module Mutant module Parallel # Parallel execution worker class Worker include Adamantium::Flat, Anima.new(:mailbox, :processor, :parent) # Run worker # # @param [Hash<Symbol, Object] attributes # # @return [self] # # @api private # def self.run(attributes) new(attributes).run self end private_class_method :new # Worker loop # # @return [self] # # @api private # # rubocop:disable Lint/Loop # def run begin parent.call(Actor::Message.new(:ready, mailbox.sender)) end until handle(mailbox.receiver.call) end private # Handle job # # @param [Message] message # # @return [Boolean] # # @api private # def handle(message) type, payload = message.type, message.payload case message.type when :job handle_job(payload) nil when :stop true else fail Actor::ProtocolError, "Unknown command: #{type.inspect}" end end # Handle mutation # # @param [Job] job # # @return [undefined] # # @api private # def handle_job(job) result = processor.call(job.payload) parent.call(Actor::Message.new(:result, JobResult.new(job: job, payload: result))) end end # Worker end # Parallel end # Mutant
Version data entries
5 entries across 5 versions & 1 rubygems