[Twisted-Python] a question ablout DeferredList

Grant Baillie grant at osafoundation.org
Tue Jan 2 22:40:46 EST 2007


On 2 Jan, 2007, at 18:32, hzqij wrote:

> i have a sample code about DeferredList like this:
>
> from twisted.internet import reactor, defer
>
> def printResult(results):
>   for resultInfo in results:
>       success, result = resultInfo
>       if success:
>           print result
>   reactor.stop()
>
> def addTen(result):
>   return result + " ten"
>
> deferred1 = defer.Deferred()
> deferred2 = defer.Deferred()
> deferred3 = defer.Deferred()
> dl = defer.DeferredList([deferred1, deferred2,
> deferred3]).addCallback(printResult)
> deferred1.callback('one')
> deferred2.callback('two')
> deferred3.callback('three')

At this point, printResult() will get called, because you just fired  
all the deferreds in the DeferredList. But, your printResult()  
assumes the reactor is running, and you haven't started it yet ...

> reactor.run()

It seems to me that if all you're doing is trying out Deferred/ 
DeferredList, you could just remove the calls to reactor.stop/start 
(): It kind of depends on what your sample code is going to be doing.

--Grant

> then i run this code, it print:
>
> one
> two
> three
>
> but the reactor never stop even i have call reactor.stop() on
> printResult, i press CTRL+C, some error happen:
>
> Unhandled error in Deferred:
> Traceback (most recent call last):
>  File "/usr/local/lib/python2.4/site-packages/twisted/internet/ 
> defer.py",
> line 317, in _runCallbacks
>   self.result = callback(self.result, *args, **kw)
>  File "/usr/local/lib/python2.4/site-packages/twisted/internet/ 
> defer.py",
> line 507, in _cbDeferred
>   self.callback(self.resultList)
>  File "/usr/local/lib/python2.4/site-packages/twisted/internet/ 
> defer.py",
> line 239, in callback
>   self._startRunCallbacks(result)
>  File "/usr/local/lib/python2.4/site-packages/twisted/internet/ 
> defer.py",
> line 304, in _startRunCallbacks
>   self._runCallbacks()
> --- <exception caught here> ---
>  File "/usr/local/lib/python2.4/site-packages/twisted/internet/ 
> defer.py",
> line 317, in _runCallbacks
>   self.result = callback(self.result, *args, **kw)
>  File "defer5.py", line 8, in printResult
>   reactor.stop()
>  File "/usr/local/lib/python2.4/site-packages/twisted/internet/ 
> base.py",
> line 342, in stop
>   raise RuntimeError, "can't stop reactor that isn't running"
> exceptions.RuntimeError: can't stop reactor that isn't running
>
> plz help me, thank you!
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python





More information about the Twisted-Python mailing list