[Twisted-Python] Re: Chaining deferreds with DeferredList

Tsai Li Ming mailinglist at ltsai.com
Sat Nov 13 10:38:36 EST 2004


I'm not too sure whether this works:

def cbTable(rows):
     dlist = []
     mt  = sqlreflector.SQLReflector(dbpool, [commentRow])
     if rows:
         for r in rows:
             d = mt.deleteRow(c)
             d.addCallback(cbDelete)
             d.addErrback(ebDelete)
             dlist.append(d)
     else:
         d = delete()
         dlist.append(d)

     dl = defer.DeferredList(dlist)
     return dl

Liming

Tsai Li Ming wrote:
> How do I chain a deferred object with multiple deferred objects within a 
> single function call?
> 
> I'm trying to wait for all the deferred to fire before triggering the 
> foo function. How can I chain up the multiple deferreds in the FOR loop?
> 
> for k in keys:
>     where = [("pk_col",reflector.EQUAL,k)]
>     d = mt.loadObjectsFrom("table",whereClause=where)
>     d.addCallback(cbTable)
>     d.addErrback(ebTable)
>     defer_list.append(d)
> 
> dl = defer.DeferredList(defer_list)
> dl.addCallback(foo)
> 
> def foo(result):
>     print result
>     reactor.stop()
> 
> def cbTable(rows):
> 
>     mt  = sqlreflector.SQLReflector(dbpool, [commentRow])
>     if rows:
>         for r in rows:
>             d = mt.deleteRow(c)
>             d.addCallback(cbDelete)
>             d.addErrback(ebDelete)
>     else:
>         d = delete()
> 
>     return d
> 
> 
> def cbDelete(result):
>     d = delete() # Returns a deferred
>     return d
> 
> 
> Thanks,
> Liming





More information about the Twisted-Python mailing list