[Twisted-Python] deferred object inside function

Duncan McGreggor duncan.mcgreggor at gmail.com
Fri Jul 7 02:48:11 MDT 2006


Yusnel Rojas GarcĂ­a wrote:

> how can I make a function which have a deferred object return a value that
> depends of the deferred object's result.
> example:
> how can get the result from the resolver?
> 
> from twisted.names import client, dns
> 
> def somefunction(somepars):
>       r  = client.Resolver('/etc/resolv.conf')
>       d = r.resolve(dns.Query('www.example.com', dns.MX, dns.IN))
>       d.Callbacks(somefunct1, somefunctErr2)
>       return ?

Have you read the docs on deferreds? There's a bunch of good ones now,
and you can get to them here:
  http://twistedmatrix.com/projects/core/documentation/howto/index.html

In particular, you want the section on "Low-Level Networking and Event
Loop".

In your example above, you probably want this, instead:

  d.addCallbacks(yourCallback, yourErrback)

As for your question, see if this sums it up:

* You want some data
* The data depends upon the result

If that's correct, then you can only get your data in the callback.
Think about writing a class to handle this, and instead of having a
function return what you want, you could set a class attribute with the
data you're looking for once the callback is fired. Or any other of
hundreds of possible solutions ;-)

d




More information about the Twisted-Python mailing list