Twisted: useless "AlreadyCalled" error

My twisted python program constantly spews this message:

Unhandled error in Deferred:

Traceback (most recent call last):
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 757, in gotResult
    _inlineCallbacks(r, g, deferred)
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 747, in _inlineCallbacks
    deferred.errback()
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 269, in errback
    self._startRunCallbacks(fail)
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 312, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 328, in _runCallbacks
    self.result = callback(self.result, *args, **kw)
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 243, in callback
    self._startRunCallbacks(result)
  File "c:\python25\lib\site-packages\twisted\internet\defer.py", line 298, in _startRunCallbacks
    raise AlreadyCalledError
twisted.internet.defer.AlreadyCalledError:

This is not very useful as it does not have a link to my source code ... I also use defer.inlineCallbacks. Any idea what could go wrong?

+5
source share
2 answers

If you have no other hints about what is going wrong (for example, in your unit tests indicating specific cases that cause this, or if pyfunc's answer does not make it obvious why this will happen), enable Delayed debugging to get information about that , where the first (and only permitted) Delay result is indicated:

from twisted.internet import defer
defer.setDebugging(True)

or

twistd --debug [...]

or

trial --debug [...]

, , . , "", ( .callback() .errback()).

inlineCallbacks, , , , , , .

, - inlineCallbacks . , , , - .

+7

, - . . , , . Twisted , , .

:

from twisted.internet.defer import Deferred
def func(x): print x
d = Deferred()
d.addCallbacks(func, func)
d.callback('First fire')
d.callback('Second fire')

:

    raise AlreadyCalledError
twisted.internet.defer.AlreadyCalledError

. .

+2

All Articles