[Twisted-Python] Event Driven Programming 101 question

Steve Freitas sflist at ihonk.com
Sat Aug 2 06:37:00 EDT 2003


Hi all,

I've got a few questions about Deferreds. I understand the concept better, but 
I need a little help at the moment. It's apparent to me that a lot's going on 
behind the scenes between Deferreds and the Reactor, and that 
twisted.enterprise orchestrates things in a way I don't yet understand.

I'm looking at this from the perspective of my little XML-RPC server. A client 
hits a XML-RPC function, and by the time that function returns its value, it 
needs all its Deferreds to have generated their results. That leads to this 
question:

When is a Deferred guaranteed to have a result?

One answer could be, "When its callback gets called." And that would be true. 
But what if the function that gets the Deferred needs the result before it 
can move on? It seems like it'll get the Deferred and then go on its merry 
way, whether the Deferred has a result or not. And that's confusing to me, 
because I'm left wondering what happens if my database takes a long time to 
respond:

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

In this case, what's it gonna be? A Deferred that's evaluated as None because 
Postgres is still churning, or is Twisted only going to let the code continue 
once the Deferred has a result?

Sorry if it seems I'm not making sense... Event-driven programming is new to 
me, but I'm a motivated learner. :-) (And if anybody knows of a good general 
guide to this paradigm, I'm all ears.)

Thanks for your help!

Steve




More information about the Twisted-Python mailing list