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')