class Kamisama::Task

Public Class Methods

new(task_index, block) click to toggle source
# File lib/kamisama/task.rb, line 3
def initialize(task_index, block)
  @task_index = task_index
  @block = block
end

Public Instance Methods

alive?() click to toggle source
# File lib/kamisama/task.rb, line 39
def alive?
  Process.getpgid(@pid)
  true
rescue Errno::ESRCH
  false
end
log(message) click to toggle source
# File lib/kamisama/task.rb, line 46
def log(message)
  puts "[WORKER #{@task_index}] #{message}"
end
restart!() click to toggle source
# File lib/kamisama/task.rb, line 29
def restart!
  puts "[Kamisama Master] Restarting Worker."
  @pid = nil
  start
end
start() click to toggle source
# File lib/kamisama/task.rb, line 8
def start
  @pid = Process.fork do
    begin
      # receive sigterm when parent dies
      Kamisama::ProcessCtrl.set_parent_death_signal(:sigterm)

      log("Worker started. Hello!")

      @block.call(@task_index)
    rescue Exception => e
      # handle all exceptions, even system ones
      log("Shutting down... #{e.message}")
      exit
    ensure
      exit
    end
  end

  Process.detach(@pid)
end
terminate!() click to toggle source
# File lib/kamisama/task.rb, line 35
def terminate!
  Process.kill("TERM", @pid)
end