class Threasy::Work::Worker

Public Class Methods

new(work, id) click to toggle source
# File lib/threasy/work.rb, line 89
def initialize(work, id)
  @work = work
  @id = id
end

Public Instance Methods

log() click to toggle source
# File lib/threasy/work.rb, line 114
def log
  Threasy.logger
end
work() click to toggle source
# File lib/threasy/work.rb, line 94
def work
  @thread = Thread.start do
    loop do
      if args = @work.grab
        job = args.shift
        log.debug "Worker ##{@id} has grabbed a job"
        begin
          job = eval(job) if job.kind_of?(String)
          job.respond_to?(:perform) ? job.perform(*args) : job.call(*args)
        rescue Exception => e
          log.error %|Worker ##{@id} error: #{e.message}\n#{e.backtrace.join("\n")}|
        end
      elsif @work.pool.size > @work.min_workers
        @work.sync { @work.pool.delete self }
        break
      end
    end
  end
end