[Twisted-Python] problems with threadedselectreactor

Antony Kummel antonykummel at yahoo.com
Tue Nov 29 07:15:08 EST 2005


Hi!
  
  I encountered two problems when using threadedselectreactor on win32. I  am not versed enough with reactor technicalities to resolve them  myself, but I would gladly conduct any tests the experts recommend.
  
  1. I often get tracebacks similar to this:
        File  "C:\Python23\Lib\site-packages\twisted\internet\threadedselectreactor.py",  line 299, in _doReadOrWrite
          why = getattr(selectable, method)()
        File "C:\Python23\Lib\site-packages\twisted\internet\abstract.py", line 108, in doWrite
          l = self.writeSomeData(self.dataBuffer)
        File "C:\Python23\lib\site-packages\twisted\internet\tcp.py", line 358, in writeSomeData
          return self.socket.send(buffer(data, 0, self.SEND_LIMIT))
      exceptions.AttributeError: 'Server' object has no attribute 'socket'
  
  To my understanding, this can only happen if the Server's  connectionLost method had been called before the exception happened,  but for some reason, writeSomeData (or sometimes another method) was  still called. I hypothesize that the Server should have been removed  from some list or another but wasn't, and that this is the reactor's  responsibility.
  
  2. Sometimes I get this error:
  Traceback (most recent call last):
    File "C:\Python23\Lib\site-packages\wx-2.6-msw-unicode\wx\_core.py", line 7493, in MainLoop
      wx.PyApp.MainLoop(self)
    File "C:\Python23\Lib\site-packages\wx-2.6-msw-unicode\wx\_core.py", line 6926, in MainLoop
      return _core_.PyApp_MainLoop(*args, **kwargs)
    File "C:\Python23\Lib\site-packages\wx-2.6-msw-unicode\wx\_core.py", line 13266, in <lambda>
      lambda event: event.callable(*event.args, **event.kw) )
    File "C:\Python23\Lib\site-packages\twisted\internet\threadedselectreactor.py", line 241, in _interleave
      self.runUntilCurrent()
  --- <exception caught here> ---
    File "C:\Python23\Lib\site-packages\twisted\internet\base.py", line 541, in runUntilCurrent
      call.func(*call.args, **call.kw)
    File "C:\Python23\Lib\site-packages\twisted\internet\task.py", line 91, in __call__
      self._reschedule()
    File "C:\Python23\Lib\site-packages\twisted\internet\task.py", line 108, in _reschedule
      self.call = reactor.callLater(delay, self)
    File "C:\Python23\Lib\site-packages\twisted\internet\threadedselectreactor.py", line 116, in callLater
      self.wakeUp()
    File "C:\Python23\Lib\site-packages\twisted\internet\threadedselectreactor.py", line 112, in wakeUp
      self.waker.wakeUp()
    File "C:\Python23\Lib\site-packages\twisted\internet\posixbase.py", line 85, in wakeUp
      self.w.send('x')
  socket.error: (10055, 'No buffer space available')
  
  This doesn't seem to be a threadedselectreactor problem, but rather a  problem that stems from it's use with arbitrary event loops. I suspect  that it happens when the main thread doesn't respond for some time. I  think that the best way to deal with it is simply to ignore this error  (in wakeUp), because if the buffer is full, then the main thread  already knows (or about to find out) that it needs to wake up, although  maybe the user should be somehow notified that there is a problem (log  message?).
  
  Thanks,
  
  Antony Kummel
  

		
---------------------------------
 Yahoo! Personals
 Single? There's someone we'd like you to meet.
 Lots of someones, actually. Yahoo! Personals
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20051129/96310b5b/attachment.htm 


More information about the Twisted-Python mailing list