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