Class: GH::Parallel
Overview
Public: …
Defined Under Namespace
Classes: Dummy
Instance Attribute Summary collapse
-
#parallelize ⇒ Object
Returns the value of attribute parallelize.
Attributes inherited from Wrapper
Instance Method Summary collapse
- #connection ⇒ Object
- #generate_response(key, response) ⇒ Object
- #in_parallel ⇒ Object
- #in_parallel? ⇒ Boolean
- #setup ⇒ Object
Methods inherited from Wrapper
#[], [], double_dispatch, #initialize, #inspect, #load, #prefixed, #reset, wraps
Constructor Details
This class inherits a constructor from GH::Wrapper
Instance Attribute Details
#parallelize ⇒ Object
Returns the value of attribute parallelize.
9 10 11 |
# File 'lib/gh/parallel.rb', line 9 def parallelize @parallelize end |
Instance Method Details
#connection ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/gh/parallel.rb', line 60 def connection @connection ||= begin layer = backend layer = layer.backend until layer.respond_to? :connection layer.connection end end |
#generate_response(key, response) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/gh/parallel.rb', line 32 def generate_response(key, response) return super unless in_parallel? dummy = Dummy.new @mutex.synchronize { @queue << [dummy, key, response] } dummy end |
#in_parallel ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/gh/parallel.rb', line 40 def in_parallel return yield if in_parallel? || !@parallelize was = @in_parallel @in_parallel = true result = nil connection.in_parallel { result = yield } @mutex.synchronize do @queue.each { |dummy, key, response| dummy.__delegate__ = backend.generate_response(key, response) } @queue.clear end result ensure @in_parallel = was unless was.nil? end |
#in_parallel? ⇒ Boolean
56 57 58 |
# File 'lib/gh/parallel.rb', line 56 def in_parallel? @in_parallel end |
#setup ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/gh/parallel.rb', line 24 def setup(*) @parallelize = true if @parallelize.nil? @in_parallel = false @mutex = Mutex.new @queue = [] super end |