[Twisted-Python] A few comments on deferreds
terry at jon.es
Fri Mar 6 06:10:55 EST 2009
Here are a few comments on deferreds. I'll keep this short. These sort of
posts don't seem to generate much/any discussion (e.g., http://bit.ly/YkSD
which I thought was cool). I'm not sure why - I find deferreds infinitely
interesting, and don't understand why other people don't seem to share the
1. If you have a deferred d1, and you call d1.chainDeferred(d2) I think it
makes sense for there to be a flag inside the deferred class that warns
you if you later call d1.addCallbacks. That's because adding more
functions to d1's callback/errback chain is probably not useful. (It
might conceivably be useful, e.g., to let you know that d1 has been
called). The result of d1 has been passed to d2, and because d2.callback
and d2.errback don't return it (see point 2 below), it is not passed
further down d1's chain. So it's most likely that someone adding a
callback to d1 after calling d1.chainDeferred doesn't really know what
2. Deferred.callback and Deferred.errback currently (implicitly) return
None. They could be changed to return their passed argument. That
would make a call to d1.chainDeferred act like a deferred fork - the
result would go down d2's callback chain, but also continue down the
callback/errback chain of d1.
3. There's also the possibility of adding a function to the Deferred class:
def incorporateDeferred(self, d2):
which might be what a naive reader might expect chainDeferred to do.
This raises the question of what you might later do with d2 (probably
nothing), but that's just like what happens with d1: if you call
d1.chainDeferred you're probably not going to return d1 to anyone. All
you can usefully do is fire it.
I'll stop for now. There's lots more that could be said, but lets see if
anyone's interested. I wish I were going to PyCon :-(
BTW, points 1 and 2 above are key to understanding what goes on in the
interview question code I recently posted (http://bit.ly/T3xKs).
More information about the Twisted-Python