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