[Twisted-Python] Deferreds

Andrew Bennetts andrew-twisted at puzzling.org
Thu Apr 4 17:35:00 MST 2002


I feel silly replying to myself, but anyway...

On Fri, Apr 05, 2002 at 10:06:46AM +1000, Andrew Bennetts wrote:
> I've been thinking about Deferreds lately, and I think they are lacking

I've been chatting about Deferreds on IRC with Drew, and he's made me
realise a few more things:
  1) There's currently no way to cancel a Deferred
  2) It looks like you can fire a Deferred multiple times.

You could workaround 1 by calling the errback if it wasn't for 2.

Point 2 surprised me; I expected Deferreds to be single shot (though I can
imagine that a multi-use Deferred would be ideal for some situations).

----
class AlreadyCalledError(Exception):
    pass

class OneShotDeferred(Deferred):
    def _runCallbacks(self, result, isError):
        if self.called:
            raise AlreadyCalledError
        Deferred._runCallbacks(self, result, isError)
----

But I think that this behaviour should probably be the default anyway (while
still providing the old behaviour).

-Andrew.





More information about the Twisted-Python mailing list