[Twisted-Python] Event Driven Programming 101 question

Moshe Zadka m at moshez.org
Sat Aug 2 07:01:46 EDT 2003


On Sat, 2 Aug 2003, Steve Freitas <sflist at ihonk.com> wrote:

> It's apparent to me that a lot's going on 
> behind the scenes between Deferreds and the Reactor

Nope. There's very little magic going on.
 
> When is a Deferred guaranteed to have a result?
> 
> One answer could be, "When its callback gets called." And that would be true. 

Yep.

> But what if the function that gets the Deferred needs the result before it 
> can move on?

It's out of luck.

> def xmlrpc_foo(self):
> 	result = dbpool.runQuery("select * from gigantic_table") # adbapi
> 	return result

This "just" works. When xmlrpc_foo returns a result, the Twisted XMLRPC
machinery checks if it is a deferred. If it is, it won't send a result
back to the client until the deferred is triggered.

Here is the code in question, just to see how little magic there is:

'''
            request.setHeader("content-type", "text/xml")
            defer.maybeDeferred(function, *args).addErrback(
                self._ebRender
            ).addCallback(
                self._cbRender, request
            )
'''

[_ebRender and _cbRender do the work of actually formatting the response]
-- 
Moshe Zadka -- http://moshez.org/
Buffy: I don't like you hanging out with someone that... short.
Riley: Yeah, a lot of young people nowadays are experimenting with shortness.
Agile Programming Language -- http://www.python.org/




More information about the Twisted-Python mailing list