Class: Elrpc::WorkerPool

Inherits:
Object
  • Object
show all
Defined in:
lib/elrpc.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(num, logger) ⇒ WorkerPool

Returns a new instance of WorkerPool.



678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
# File 'lib/elrpc.rb', line 678

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

Instance Method Details

#invoke(job) ⇒ Object



701
702
703
704
705
706
707
# File 'lib/elrpc.rb', line 701

def invoke(job)
     if @worker_threads.size == 0 then
       @logger.debug "Worker : Ignore #{job}"
       return
     end
  @job_queue << job
end

#killObject



709
710
711
712
713
714
715
# File 'lib/elrpc.rb', line 709

def kill
  @worker_threads.size.times {
  invoke(nil)
  }
     @worker_threads.each {|t| t.join }
  @worker_threads.clear
end