Re-using deferred objects in Twisted
In Twisted, it seems that a deferred object can only be used once after its callback has fired, as opposed to other "promise"-based libraries I've worked with: from twisted.internet import defer class Foo(object): def __init__(self): self.dfd = defer.Deferred() def async(self): return self.dfd @defer.inlineCallbacks def func(self): print 'Started!' result = yield self.async() print 'Stopped with result: {0}'.format(result) if __name__ == '__main__': foo = Foo() foo.func() import time time.sleep(3) foo.dfd.callback('3 seconds passed!') foo.func() On standard out, one has: $ Started! $ Stopped