Assuming that task_to_run
really is something that is running async, then @Elisha was pointing you at the issue (your example code lists the list and it shouldn't). So runnable code looks like:
#!/usr/bin/env python
from twisted.internet import defer
def task_to_run(data):
print 'running'
print data
def finished(res):
print 'finished', res
tasks = []
for x in range(0,5):
d = defer.Deferred()
d.addCallback(task_to_run)
d.callback("blah - " + str(x)) # Fire them as I make them
tasks.append(d)
dl = defer.DeferredList(tasks)
dl.addCallback(finished)
With output of:
% ./deferredList.py
running
blah - 0
running
blah - 1
running
blah - 2
running
blah - 3
running
blah - 4
finished [(True, None), (True, None), (True, None), (True, None), (True, None)]
BTW very nice docs on DeferredLists are at: Deferred Reference
But if the tasks aren't actually running async then you really could just make one defer queue:
#!/usr/bin/env python
from twisted.internet import defer
def task_to_run(data):
print 'running'
print data
return data
def finished(res):
print 'finished', res
d = defer.Deferred()
for x in range(0,5):
d.addCallback(task_to_run)
d.addCallback(finished)
d.callback("blah") # Fire the deferred
Runs as:
% ./deferred.py
running
blah
running
blah
running
blah
running
blah
running
blah
finished blah