[Twisted-Python] blocking code in object constructors
Tommi Virtanen
tv at twistedmatrix.com
Fri Jun 27 06:17:21 MDT 2003
On Fri, Jun 27, 2003 at 01:40:32PM +0400, Egor Cheshkov wrote:
> I need to do some blocking stuff in object constructor. However constructors
> can't return deferreds. The solution I see is to put all blocking
> initialization to some method and use factory to generate objects. Factory
> will return deferred wich will be called back when object initialization is
> complete. Is there Twisted Standard way to do such things?
Not that I know of, but it's dead simple.
Of course, first you have to replace all that blocking stuff.
Deferred doesn't make it ok for you to block; it makes it ok
for async things to complete later.
class ThingieThatUsedToBlock:
def __init__(self, foo, bar):
# don't block or even do the async thing here
pass
def setUp(self):
# don't block here, but do start the async init.
deferred = startTheAsyncThingie()
deferred.addCallback(lambda _: self)
return deferred
def createThingie(*a, **kw):
t = ThingieThatUsedToBlock(*a, **kw)
d = t.setUp()
return d
--
:(){ :|:&};:
More information about the Twisted-Python
mailing list