class Delayed::Master::Forker

Public Class Methods

new(master) click to toggle source
# File lib/delayed/master/forker.rb, line 4
def initialize(master)
  @master = master
  @config = master.config
end

Public Instance Methods

new_worker(worker) click to toggle source
# File lib/delayed/master/forker.rb, line 9
def new_worker(worker)
  @master.logger.info "forking #{worker.name}..."
  fork_worker(worker)
  @master.logger.info "forked #{worker.name} with pid #{worker.pid}"

  @master.workers << worker
end

Private Instance Methods

create_instance(worker) click to toggle source
# File lib/delayed/master/forker.rb, line 30
def create_instance(worker)
  require_relative 'worker_extension'

  instance = Delayed::Worker.new(worker.setting.data)
  [:max_run_time, :max_attempts, :destroy_failed_jobs].each do |key|
    if (value = worker.setting.send(key))
      Delayed::Worker.send("#{key}=", value)
    end
  end
  [:max_memory].each do |key|
    if (value = worker.setting.send(key))
      instance.send("#{key}=", value)
    end
  end
  instance.master_logger = @master.logger
  instance
end
fork_worker(worker) click to toggle source
# File lib/delayed/master/forker.rb, line 19
def fork_worker(worker)
  @config.run_callback(:before_fork, @master, worker)
  worker.pid = fork do
    worker.pid = Process.pid
    worker.instance = create_instance(worker)
    @config.run_callback(:after_fork, @master, worker)
    $0 = worker.process_title
    worker.instance.start
  end
end