[Twisted-web] Strange crash with custom resource code

Matt Feifarek matt.feifarek at gmail.com
Thu Dec 1 14:16:43 MST 2005


I recently moved an existing twisted http app from Twisted 1.x to 2.1,
and am having a strange traceback that I can't track down.

My code renders jpeg images on-the-fly via a spawnProcess() on the
reactor. It used to work fine, and it still seems to work (though very
very slowly).

I'm getting tons of tracebacks at the console that launched the reactor:

Unhandled error in Deferred:
Traceback (most recent call last):
  File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py",
line 294, in _startRunCallbacks
    self._runCallbacks()
  File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py",
line 307, in _runCallbacks
    self.result = callback(self.result, *args, **kw)
  File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py",
line 229, in callback
    self._startRunCallbacks(result)
  File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py",
line 294, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py",
line 307, in _runCallbacks
    self.result = callback(self.result, *args, **kw)
  File "/usr/local/lib/python2.4/site-packages/Wrangler/render/image/__init__.py
", line 132, in postConvert_Success
    Inline_Generic.render_present( self, args[0] )
  File "/usr/local/lib/python2.4/site-packages/Wrangler/render/generic.py",
line  131, in render_present
    static.FileTransfer(f, size, request)
  File "/usr/lib/python2.4/site-packages/twisted/web/static.py", line
413, in __init__
    request.registerProducer(self, 0)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
583, in registerProducer
    self.transport.registerProducer(producer, streaming)
  File "/usr/lib/python2.4/site-packages/twisted/internet/abstract.py",
line 273, in registerProducer
    producer.resumeProducing()
  File "/usr/lib/python2.4/site-packages/twisted/python/hook.py", line
153, in newfunc
    return getattr(klass, ORIG(klass, name))(*args, **kw)
  File "/usr/lib/python2.4/site-packages/twisted/web/static.py", line
426, in resumeProducing
    self.request.finish()
  File "/usr/lib/python2.4/site-packages/twisted/web/server.py", line
265, in finish
    http.Request.finish(self)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
630, in finish
    self._cleanup()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
437, in _cleanup
    self.channel.requestDone(self)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
1058, in requestDone
    self.requests[0].noLongerQueued()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
468, in noLongerQueued
    self.transport.registerProducer(self.producer, self.streamingProducer)
  File "/usr/lib/python2.4/site-packages/twisted/internet/abstract.py",
line 273, in registerProducer
    producer.resumeProducing()
  File "/usr/lib/python2.4/site-packages/twisted/python/hook.py", line
153, in newfunc
    return getattr(klass, ORIG(klass, name))(*args, **kw)
  File "/usr/lib/python2.4/site-packages/twisted/web/static.py", line
426, in resumeProducing
    self.request.finish()
  File "/usr/lib/python2.4/site-packages/twisted/web/server.py", line
265, in finish
    http.Request.finish(self)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
630, in finish
    self._cleanup()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
437, in _cleanup
    self.channel.requestDone(self)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
1058, in requestDone
    self.requests[0].noLongerQueued()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
468, in noLongerQueued
    self.transport.registerProducer(self.producer, self.streamingProducer)
  File "/usr/lib/python2.4/site-packages/twisted/internet/abstract.py",
line 273, in registerProducer
    producer.resumeProducing()
  File "/usr/lib/python2.4/site-packages/twisted/python/hook.py", line
153, in newfunc
    return getattr(klass, ORIG(klass, name))(*args, **kw)
  File "/usr/lib/python2.4/site-packages/twisted/web/static.py", line
426, in resumeProducing
    self.request.finish()
  File "/usr/lib/python2.4/site-packages/twisted/web/server.py", line
265, in finish
    http.Request.finish(self)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
630, in finish
    self._cleanup()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
437, in _cleanup
    self.channel.requestDone(self)
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
1058, in requestDone
    self.requests[0].noLongerQueued()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
472, in noLongerQueued
    self._cleanup()
  File "/usr/lib/python2.4/site-packages/twisted/web/http.py", line
437, in _cleanup
    self.channel.requestDone(self)
exceptions.AttributeError: Request instance has no attribute 'channel'

Very little of that traceback refers to any of my own code, so I don't
know how to begin digging in for what I've done wrong. My suspicion is
that it's a matter of minor api changes in the Resource class, but I
can't find any migration documentation on twistedmatrix.com.

If anyone could give me a track to start my digging, I'd appreciate it.

Thanks!



More information about the Twisted-web mailing list