class Workerholic::Manager

Handles polling from Redis and hands job to worker

Attributes

logger[R]
scheduler[R]
worker_balancer[R]
workers[R]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/workerholic/manager.rb, line 6
def initialize(opts = {})
  @workers = []
  Workerholic.workers_count.times { @workers << Worker.new }

  @scheduler = JobScheduler.new(sorted_set: opts[:sorted_set])
  @worker_balancer = WorkerBalancer.new(workers: workers, auto_balance: opts[:auto_balance])

  @logger = LogManager.new
end

Public Instance Methods

shutdown() click to toggle source
# File lib/workerholic/manager.rb, line 29
def shutdown
  workers.each(&:kill)
  worker_balancer.kill
  scheduler.kill
  Starter.kill_memory_tracker_thread

  workers.each(&:join)
  scheduler.join
end
start() click to toggle source
# File lib/workerholic/manager.rb, line 16
def start
  worker_balancer.start
  workers.each(&:work)
  scheduler.start

  sleep
rescue SystemExit, Interrupt
  logger.info("Workerholic's process #{Process.pid} is gracefully shutting down, letting workers finish their current jobs...")
  shutdown

  exit
end