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.



673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
# File 'lib/elrpc.rb', line 673

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



696
697
698
699
700
701
702
# File 'lib/elrpc.rb', line 696

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

#killObject



704
705
706
707
708
709
710
# File 'lib/elrpc.rb', line 704

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