[Twisted-Python] inlineCallbacks: Twisted 2.5's generator-based Deferred microthreads-thingie
Itamar Shtull-Trauring
itamar at itamarst.org
Fri Feb 16 17:23:02 EST 2007
Apparently some people are not aware of this new feature in Twisted 2.5
(requires Python 2.5), written by James Knight based on code by Chris
Armstrong. Previous versions of Twisted have deferredGenerator, but the
syntax isn't as nice.
Here's some sample code JP Calderone posted to python-dev recently:
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
from twisted.web.client import getPage
@inlineCallbacks
def fetchSequence(...):
homepage = yield getPage(homepage)
firstData = yield getPage(anotherPage)
if someCondition(firstData):
while:
secondData = yield getPage(wherever)
if someOtherCondition(secondData):
break
else:
...
Essentially this allows one to "wait" for a Deferred's result. It also
does error handling in the way one would expect: just use try/except
around the yield.
Be *very careful* when using this functionality, as every time you do
"yield" you are doing a context switch. Random other code will have run
for an indeterminate amount of time, possibly changing attributes and
state on objects the generator has references to.
http://twistedmatrix.com/documents/current/api/twisted.internet.defer.html#inlineCallbacks
More information about the Twisted-Python
mailing list