Sha256: 262d4cf585be90fbb71d73ba8dcf8d85ab646748615f3ae4c376bdab847d8c73

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

module Experiment
  class WorkServer
    def initialize(experiments, options, ip = "localhost")
      uri="druby://#{ip}:8787"
      # The object that handles requests on the server
      front_object = self
      #$SAFE = 1   # disable eval() and friends
      DRb.start_service(uri, front_object)
      
      @experiments = experiments
      @started = @experiments.map { |e| false }
      @done = @started
      @options = options
      @experiment_instances = []
      DRb.thread.join
    end
    
    def ready?
      true
    end
    
    def new_item
      @experiments.each_with_index do |e, i|
        if @experiment_instances[i].nil?
          exp = @experiments[i]
          require "./experiments/#{exp}/#{exp}"
  			  cla = eval(as_class_name(exp))
  				experiment = cla.new :master, exp, @options.opts, @options.env
  				experiment.master_run! @options.cv
  				@experiment_instances[i] = experiment
  				return i
  			elsif !@experiment_instances[i].distribution_done?
          return i
        end
      end
      
      DRb.stop_service if @experiment_instances.all? {|a| a.done? }
      false
    end
    
    def notify
      Notify
    end
    
    def experiment(num)
      @experiments[num]
    end
    
    def instance(num)
      @experiment_instances[num]
    end
    
    def as_class_name(str)
      str.split(/[\_\-]+/).map(&:capitalize).join
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
experiment-0.2.0 lib/experiment/work_server.rb