[Twisted-Python] Callbacks, Looping, and Variable Binding

Tommi Virtanen tv at twistedmatrix.com
Fri Aug 1 02:15:33 MDT 2003


On Thu, Jul 31, 2003 at 02:20:24PM -0600, Justin Johnson wrote:
>      for item in list:
>          d.addCallbacks(onSuccess, log.err, callbackArgs=(item,))
>          deferreds.append(d)
> 
> and then defining onSuccess like...
> 
>     def onSuccess(results, args):
>         item = args[0]
>         d = item.doSomethingElseThatReturnsDeferred()
>         return d
> 
> Is this an acceptable way to accomplish this?  It is working in my code
> but I'd like to do things the right way.

	Yes. I'd make that prettier with

    def onSuccess(results, item):
        d = item.doSomethingElseThatReturnsDeferred()
        return d
...
    for item in list:
	d.addCallback(onSuccess, item)
	d.addErrback(log.err)
	deferreds.append(d)

> > 	Besides, you are adding the outer d to deferreds once per
> > 	iteration. That's broken.
> I'm not sure what you mean here.  I was adding my deferred to a list and
> it seemed to be doing what I wanted (at least I think it was).

	Your original code had

>     d = doSomethingThatReturnsDeferred()
>
>     for item in list:
>         d.addCallbacks(onSuccess, log.err)
>         deferreds.append(d)

	Which ends up adding the _same_ d len(list) times to deferreds.

-- 
:(){ :|:&};:




More information about the Twisted-Python mailing list