class DontStallMyProcess::Local::ChildProcessPool
Constants
- MAX_ALLOC_TRIES
- SEMAPHORE
Public Class Methods
alloc()
click to toggle source
# File lib/dont-stall-my-process/local/child_process_pool.rb, line 7 def self.alloc process = nil tries = MAX_ALLOC_TRIES until (process && process.alive?) || tries == 0 tries -= 1 SEMAPHORE.synchronize do if !@pool || @pool.empty? process = ChildProcess.new else process = @pool.shift end end end unless process && process.alive? fail SubprocessInitializationFailed, "failed to allocated subprocess (tried #{MAX_ALLOC_TRIES} times)" end process end
each(&block)
click to toggle source
# File lib/dont-stall-my-process/local/child_process_pool.rb, line 47 def self.each(&block) @pool.each(&block) if @pool end
free(process)
click to toggle source
# File lib/dont-stall-my-process/local/child_process_pool.rb, line 28 def self.free(process) # We do not want killed processes to enter the pool again. return unless process.alive? terminate = true if Configuration.process_pool_size && Configuration.process_pool_size > 0 SEMAPHORE.synchronize do @pool ||= [] if @pool.size < Configuration.process_pool_size @pool << process terminate = false end end end process.quit if terminate end