[Twisted-Python] Maximum Recursion Depth Error with Twisted 8.2/Stackless 2.6.1
Andrew Francis
andrewfr_ice at yahoo.com
Mon Feb 2 15:47:47 MST 2009
Hi Colleagues:
I recently updated to Stackless 2.6.1 and Twisted 8.2. I executed the following programme that works fine under Stackless 2.5.2 and Twisted (including 8.2) and I received the following error:
traceback (most recent call last):
File "ToyProcessor5.py", line 60, in twistedReactor
reactor.run()
File "/usr/local/lib/python2.6/site-packages/twisted/internet/base.py"
, line 1048, in run
self.mainLoop()
--- <exception caught here> ---
File "/usr/local/lib/python2.6/site-packages/twisted/internet/base.py"
, line 1057, in mainLoop
self.runUntilCurrent()
File "/usr/local/lib/python2.6/site-packages/twisted/internet/base.py"
, line 707, in runUntilCurrent
log.deferr()
File "/usr/local/lib/python2.6/site-packages/twisted/python/log.py", l
ine 153, in err
_stuff = failure.Failure()
File "/usr/local/lib/python2.6/site-packages/twisted/python/failure.py
", line 265, in __init__
parentCs = reflect.allYourBase(self.type)
", line 542, in allYourBase
accumulateBases(classObj, l, baseClass)
File "/usr/local/lib/python2.6/site-packages/twisted/python/reflect.py", line 550, in accumulateBases
accumulateBases(base, l, baseClass)
File "/usr/local/lib/python2.6/site-packages/twisted/python/reflect.py", line 550, in accumulateBases
accumulateBases(base, l, baseClass)
File "/usr/local/lib/python2.6/site-packages/twisted/python/reflect.py", line 550, in accumulateBases
accumulateBases(base, l, baseClass)
File "/usr/local/lib/python2.6/site-packages/twisted/python/reflect.py", line 550, in accumulateBases
accumulateBases(base, l, baseClass)
exceptions.RuntimeError: maximum recursion depth exceeded
Similarily written programmes fail in the same fashion. What is suspicious is that there is no recursion in the offending section. Even if I create one worker tasklet, I get the same error.
def twistedReactor():
l = task.LoopingCall(stackless.schedule)
l.start(.01)
reactor.run()
however, if I change
l = task.LoopingCall(stackless.schedule)
to
l = task.LoopingCall(tick)
and tick is
def tick():
stackless.schedule()
the programme works. Although a work around, I would like to find the real problem.
What particular worries me is when I created small test examples, I was not able to recreate the problem. Something else is going on....
What I would appreciate is some hints as to what may be happening.
- I normally don't expect "Maximum Recursion Depth" errors in Stackless.
- What is the reflect.allYourBases stuff?
- What is log.deferr? (I don't recall seeing that method).
If I get few clues, it would make it easier for me to write new tests and zero in on the problem. Hopefully the problem is with my code rather than Stackless 2.6.1 and/or Twisted 8.2
I have included some sample code. Unfortunately ToyProcessor5.py is a bit large (I have newer code that is smaller but requires more files)
Cheers,
Andrew
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ToyProcessor5.py
Type: text/x-python
Size: 13450 bytes
Desc: not available
URL: </pipermail/twisted-python/attachments/20090202/8ecf9fca/attachment-0006.py>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Bad.py
Type: text/x-python
Size: 1486 bytes
Desc: not available
URL: </pipermail/twisted-python/attachments/20090202/8ecf9fca/attachment-0007.py>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Good.py
Type: text/x-python
Size: 1444 bytes
Desc: not available
URL: </pipermail/twisted-python/attachments/20090202/8ecf9fca/attachment-0008.py>
More information about the Twisted-Python
mailing list