I'm suggesting that there are lots more problems with your code than the one you have identified. Any method which is decorated with @defer.inlineCallbacks will return a Deferred, and you need to handle every Deferred somehow. Generally (although not always, as lvh has said) you do that by yielding it.
Your code should be ---- def render_GET(self, request): ... d = self.A() d.addErrback(request.processingFailed) return NOT_DONE_YET @inlineCallbacks def A(self): ... tmp = yield subprocess(args) ... yield self.B() @inlineCallbacks def B(self): ... tmp = yield subprocess(args) ... yield self.C() def C(self): ... x = yield self.D(...) y = yield self.D(...) z = yield self.D(...) ... yield self.E() @inlineCallbacks def D(self): ... tmp = yield subprocess(args) ... returnValue(tmp) @inlineCallbacks def E(self): ... tmp = yield subprocess(args) ... request.write(...) request.finished() ---- Here you see that all of the Deferreds are handled, either by yielding them or, in the case of the Deferred from A, by adding an errback that will conveniently format an HTML error response. Dustin _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python