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
[], #[], #frontend, #frontend=, #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.
8 9 10 |
# File 'lib/gh/parallel.rb', line 8 def parallelize @parallelize end |
Instance Method Details
#connection ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/gh/parallel.rb', line 51 def connection @connection ||= begin layer = backend layer = layer.backend until layer.respond_to? :connection layer.connection end end |
#generate_response(key, response) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/gh/parallel.rb', line 26 def generate_response(key, response) return super unless in_parallel? dummy = Dummy.new @mutex.synchronize { @queue << [dummy, key, response] } dummy end |
#in_parallel ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/gh/parallel.rb', line 33 def in_parallel return yield if in_parallel? or not @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
47 48 49 |
# File 'lib/gh/parallel.rb', line 47 def in_parallel? @in_parallel end |
#setup ⇒ Object
18 19 20 21 22 23 24 |
# File 'lib/gh/parallel.rb', line 18 def setup(*) @parallelize = true if @parallelize.nil? @in_parallel = false @mutex = Mutex.new @queue = [] super end |