[Twisted-Python] Threading traceback
Uwe C. Schroeder
uwe at oss4u.com
Wed Mar 30 12:02:07 MST 2005
Hi everyone,
I'm using twisted in a thread together with wxPython.
Everything works quite fine, but I'm getting a strange traceback when I exit
the application.
here's the scenario:
wx runs in the main thread
twisted runs in a secondary thread which is started like:
_daemon = DaemonLoop(self,self._port)
_daemon.setDaemon(True)
_daemon.start()
where Daemonloop is (partial):
class DaemonLoop(threading.Thread,pb.Referenceable):
def __init__(self, wxEvtHandler, port):
super(DaemonLoop, self).__init__()
self.ui = UIProxy(wxEvtHandler)
self.port=port
def _error(self,error):
if self.ui:
self.ui._error(error)
def run(self):
# Run reactor
reactor.run(installSignalHandlers=0)
def stop(self):
reactor.stop()
def connectionLost(self):
self.ui.connectionLost()
reactor.stop()
I stop the application from the main thread using
_daemon.stop() <- should kill the twisted reactor
wx.Exit() <- kills the main thread
The app exits (on linux), but I get this traceback:
Unhandled exception in thread started by <bound method DaemonLoop.__bootstrap
of <DaemonLoop(Thread-1, stopped daemon)>>
Traceback (most recent call last):
File "/usr/lib/python2.3/threading.py", line 451, in __bootstrap
self.__stop()
File "/usr/lib/python2.3/threading.py", line 460, in __stop
self.__block.notifyAll()
File "/usr/lib/python2.3/threading.py", line 256, in notifyAll
self.notify(len(self.__waiters))
File "/usr/lib/python2.3/threading.py", line 238, in notify
currentThread() # for side-effect
TypeError: 'NoneType' object is not callable
The problem seems to be on windows. There the app doesn't exit all the time,
just sometimes. On Win the window disappears, but in the process list is
still the application process.
So this looks to me like there are still non daemon threads around which keep
the application from exiting.
On a side note: I'm also using the "deferToThread" method for some longer
running tasks, so it might well be that it's one of those threads causing the
issue. Is there a way to figure out which thread doesn't die?
Any pointers are highly appreciated.
Thanks
UC
--
Open Source Solutions 4U, LLC 2570 Fleetwood Drive
Phone: +1 650 872 2425 San Bruno, CA 94066
Cell: +1 650 302 2405 United States
Fax: +1 650 872 2417
More information about the Twisted-Python
mailing list