Part of twisted.internet.defer View Source
WARNING: this function will not work in Python 2.4 and earlier!
inlineCallbacks helps you write Deferred-using code that looks like a regular sequential function. This function uses features of Python 2.5 generators. If you need to be compatible with Python 2.4 or before, use thedeferredGenerator
function instead, which accomplishes the same thing, but with somewhat more
boilerplate. For example:
@inlineCallBacks
def thingummy():
thing = yield makeSomeRequestResultingInDeferred()
print thing #the result! hoorj!
When you call anything that results in a Deferred, you
can simply yield it; your generator will automatically be resumed when the
Deferred's result is available. The generator will be sent the result of
the Deferred with
the 'send' method on generators, or if the result was a failure,
'throw'.
Your inlineCallbacks-enabled generator will return a Deferred
object, which will result in the return value of the generator (or will
fail with a failure object if your generator raises an unhandled
exception). Note that you can't use return result to return a
value; use returnValue(result) instead. Falling off the end of
the generator, or simply using return will cause the Deferred to
have a result of None.
Deferred
returned from your deferred generator may errback if your generator raised
an exception:
@inlineCallbacks
def thingummy():
thing = yield makeSomeRequestResultingInDeferred()
if thing == 'I love Twisted':
# will become the result of the Deferred
returnValue('TWISTED IS GREAT!')
else:
# will trigger an errback
raise Exception('DESTROY ALL LIFE')