[Twisted-Python] Chaining deferreds with DeferredList

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

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
participants (1)
-
Tsai Li Ming