Class: FloorManager::Workers
- Inherits:
-
Object
- Object
- FloorManager::Workers
- Defined in:
- lib/floormanager/workers.rb
Instance Attribute Summary collapse
-
#queue ⇒ Object
readonly
Returns the value of attribute queue.
Instance Method Summary collapse
- #checkin(*args) ⇒ Object
- #checkout ⇒ Object
- #failed(result = nil) ⇒ Object
- #halt(time) ⇒ Object
-
#initialize(*queue) ⇒ Workers
constructor
A new instance of Workers.
- #perform(options = {}) ⇒ Object
- #result(result, state = States::SUCCESS) ⇒ Object
- #success(result) ⇒ Object
- #synchronize ⇒ Object (also: #exclusively)
Constructor Details
#initialize(*queue) ⇒ Workers
Returns a new instance of Workers.
4 5 6 7 8 |
# File 'lib/floormanager/workers.rb', line 4 def initialize(*queue) queue = *queue @queue = queue.kind_of?(FloorManager::Queue) ? queue : FloorManager::Queue.new(queue) @mutex = Mutex.new end |
Instance Attribute Details
#queue ⇒ Object (readonly)
Returns the value of attribute queue.
9 10 11 |
# File 'lib/floormanager/workers.rb', line 9 def queue @queue end |
Instance Method Details
#checkin(*args) ⇒ Object
39 40 41 |
# File 'lib/floormanager/workers.rb', line 39 def checkin(*args) synchronize{@queue.checkin(*args)} end |
#checkout ⇒ Object
35 36 37 |
# File 'lib/floormanager/workers.rb', line 35 def checkout synchronize{@queue.checkout} end |
#failed(result = nil) ⇒ Object
60 61 62 |
# File 'lib/floormanager/workers.rb', line 60 def failed(result=nil) result(result, States::FAILED) end |
#halt(time) ⇒ Object
48 49 50 |
# File 'lib/floormanager/workers.rb', line 48 def halt(time) synchronize{sleep(time)} end |
#perform(options = {}) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/floormanager/workers.rb', line 11 def perform(={}) = {:threads => 1, :timeout => false}.merge() threads = (0...[:threads]).to_a.map do |thread_id| Thread.new do until queue.done? if item = checkout result = yield(item[:item]) result = Result.new(result, (result.state rescue States::SUCCESS)) item[:value] = result checkin(item, result.state) else Thread.pass end end end end if [:timeout] threads.each{|t| t.join([:timeout])} else threads.each{|t| t.join} end @queue end |
#result(result, state = States::SUCCESS) ⇒ Object
52 53 54 |
# File 'lib/floormanager/workers.rb', line 52 def result(result, state=States::SUCCESS) Result.new(result, state) end |
#success(result) ⇒ Object
56 57 58 |
# File 'lib/floormanager/workers.rb', line 56 def success(result) result(result, States::SUCCESS) end |
#synchronize ⇒ Object Also known as: exclusively
43 44 45 |
# File 'lib/floormanager/workers.rb', line 43 def synchronize @mutex.synchronize{yield} end |