Class: Elrpc::WorkerPool
- Inherits:
-
Object
- Object
- Elrpc::WorkerPool
- Defined in:
- lib/elrpc.rb
Overview
タスク処理用のスレッドプール
Instance Method Summary collapse
-
#initialize(num, logger) ⇒ WorkerPool
constructor
A new instance of WorkerPool.
- #invoke(job) ⇒ Object
- #kill ⇒ Object
Constructor Details
#initialize(num, logger) ⇒ WorkerPool
Returns a new instance of WorkerPool.
681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 |
# File 'lib/elrpc.rb', line 681 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
704 705 706 707 708 709 710 |
# File 'lib/elrpc.rb', line 704 def invoke(job) if @worker_threads.size == 0 then @logger.debug "Worker : Ignore #{job}" return end @job_queue << job end |
#kill ⇒ Object
712 713 714 715 716 717 718 |
# File 'lib/elrpc.rb', line 712 def kill @worker_threads.size.times { invoke(nil) } @worker_threads.each {|t| t.join } @worker_threads.clear end |