On Sep 13, 2006, at 5:14 PM, Jonathan Vanasco wrote:
I can't wrap my head around this
FactoryA needs an object from FactoryB FactoryB has a finite pool of objects, which can be checked in and checked out
I need FactoryA to not-progress until FactoryB is ready to dispense an object.
in all of my attempts, i end up with a deferred object in the Factory A code.
can anyone point me in the right direction?
Here's a stab at the idea. class FactoryB: product = B pool = [ self.product() for _ in range(0,10) ] queue = [] def allocate( self ): if not self.pool: d = defer.Deferred() self.queue.append( d ) return d else: return defer.succeed( self.pool.pop() ) def free( self, p ): if self.queue: d = self.queue.pop( 0 ) d.callback( p ) else: self.pool.append( p ) class FactoryA: product = A factoryB = FactoryB() def allocate( self ): d = self.factoryB.allocate() d.addCallback( self._gotB ) return d def _gotB( self, b ) a = self.product() a.b = b return a def _gotA( a ): # do something with the A object def main(): factoryA = FactoryA() d = factoryA.allocate() d.addCallback( _gotA ) Maybe others will have a more refined explanation.