class Elrpc::WorkerPool

タスク処理用のスレッドプール

Public Class Methods

new(num, logger) click to toggle source
# File lib/elrpc.rb, line 701
  def initialize(num, logger)
@logger = logger
    @job_queue = Queue.new
    @worker_threads = []
    num.times {
          @worker_threads << Thread.start(@job_queue, @logger) { |queue, logger|
    logger.debug("Worker Start")
            loop {
      begin
        job = queue.shift
        logger.debug "Worker Thread : Job #{job}"
        break if job.nil?
        job.call
      rescue => e
        logger.error "Worker Error >>"
        logger.error e
      end
            }
    logger.debug("Worker Exit")
          }
    }
  end

Public Instance Methods

invoke(job) click to toggle source
# File lib/elrpc.rb, line 724
  def invoke(job)
if @worker_threads.size == 0 then
  @logger.debug "Worker : Ignore #{job}"
  return
end
    @job_queue << job
  end
kill() click to toggle source
# File lib/elrpc.rb, line 732
  def kill
    @worker_threads.size.times {
          invoke(nil)
    }
@worker_threads.each {|t| t.join }
    @worker_threads.clear
  end