class Seiya::Scheduler
Public Class Methods
new()
click to toggle source
# File lib/seiya/scheduler.rb, line 7 def initialize @request_q = Queue.new @run = false end
Public Instance Methods
add_requests(requests)
click to toggle source
# File lib/seiya/scheduler.rb, line 12 def add_requests(requests) requests.each do |request| next unless request.registered? Seiya.process_request request @request_q << request end run unless @run end
Private Instance Methods
multi_run(requests)
click to toggle source
# File lib/seiya/scheduler.rb, line 45 def multi_run(requests) count = requests.count / num_processors + 1 threads = [] requests.each_slice(count) do |slice| threads << Thread.new do process_requests slice end end threads.each do |t| t.join end end
num_processors()
click to toggle source
# File lib/seiya/scheduler.rb, line 40 def num_processors return @num_processors unless @num_processors.nil? @num_processors = Util.num_processors end
process_gen(gen)
click to toggle source
# File lib/seiya/scheduler.rb, line 65 def process_gen(gen) gen.each do |e| if e.is_a? Array e.each do |_e| process_gen _e end elsif e.is_a? Seiya::Item Seiya.process_item e elsif e.is_a? Request add_requests [e] elsif e.is_a? Enumerator process_gen e end end end
process_requests(requests)
click to toggle source
# File lib/seiya/scheduler.rb, line 58 def process_requests(requests) requests.each do |request| gen = request.fire process_gen gen end end
run()
click to toggle source
# File lib/seiya/scheduler.rb, line 23 def run @run = true @thread = Thread.new do requests = [] until @request_q.empty? requests << @request_q.pop end multi_run requests end @thread.join if @request_q.empty? stop else run end end
stop()
click to toggle source
# File lib/seiya/scheduler.rb, line 81 def stop @run = false end