[Twisted-Python] Interview question on deferreds
Terry Jones
terry at jon.es
Fri Mar 6 03:41:37 MST 2009
I'm going to post a few short comments on deferreds. As a fun standalone
warm-up exercise, here's an interview-style question for people who claim
to understand Twisted's deferreds.
What will the following code print, and why?
from twisted.internet import defer
def e_ok(x):
print 'extra is ok:', x
return x
def e_nok(f):
# Propagate the failure (by returning it).
print 'extra failed'
return f
def raiser(_):
raise Exception('oops')
extra = defer.Deferred()
extra.addCallbacks(e_ok, e_nok)
extra.addCallback(raiser)
extra.addCallbacks(e_ok, e_nok)
def d_nothing(x):
print 'Doing nothing with:', x
return x
def d_ok(x):
print 'd is ok:', x
def d_nok(f):
# Absorb the failure (by implicitly returning None).
print 'd failed'
d = defer.Deferred()
d.addCallback(d_nothing)
d.chainDeferred(extra)
d.addCallbacks(d_ok, d_nok)
d.callback('xyz')
Don't read my next post if you prefer to figure this out yourself.
Terry
More information about the Twisted-Python
mailing list