lib/mini_scheduler/manager.rb in mini_scheduler-0.11.0 vs lib/mini_scheduler/manager.rb in mini_scheduler-0.12.0

- old
+ new

@@ -1,10 +1,10 @@ # frozen_string_literal: true module MiniScheduler class Manager - attr_accessor :random_ratio, :redis, :enable_stats, :queue + attr_accessor :random_ratio, :redis, :enable_stats, :queue, :workers class Runner def initialize(manager) @stopped = false @mutex = Mutex.new @@ -27,13 +27,16 @@ keep_alive end sleep (@manager.keep_alive_duration / 2) end end - @thread = Thread.new do - while !@stopped - process_queue + @threads = [] + manager.workers.times do + @threads << Thread.new do + while !@stopped + process_queue + end end end end def keep_alive @@ -126,14 +129,14 @@ enq(nil) kill_thread = Thread.new do sleep 0.5 - @thread.kill + @threads.each(&:kill) end - @thread.join + @threads.each(&:join) kill_thread.kill kill_thread.join end end @@ -169,9 +172,10 @@ self.new(skip_runner: true) end def initialize(options = nil) @queue = options && options[:queue] || "default" + @workers = options && options[:workers] || 1 @redis = MiniScheduler.redis @random_ratio = 0.1 unless options && options[:skip_runner] @runner = Runner.new(self) self.class.current[@queue] = self