[EMAIL PROTECTED] wrote: > Nevermind. I found a better solution. I used shared memory to create > a keep-alive flag. I then use the select function with a specified > timeout, and recheck the keep-alive flag after each timeout.
As Dennis points out, your original attempt was destined to fail because you were calling the method from the main thread, not the one you wanted to kill. Threads don't magically execute any methods that are attached to the Thread instance just because they're attached. You have to actually call those methods *from* the thread, which means from the run() method or from any of the routines it calls (whether they are methods on that Thread or not), but it must be done in the context of the thread you want to raise exceptions in or it won't work. More importantly, you've now described your use case (and I hope that of the OP as well, since he hasn't replied yet): killing threads. This is an oft-discussed topic here, and searching the archives will probably give you lots more answers, but the short answer is you cannot kill a thread in Python (except by exiting the entire process). Instead, as you've discovered, you must ask it nicely to exit. The nearly canonical approach to doing that is as follows: class MyThread(threading.Thread): def __init__(self, *args, **kwargs): threading.Thread.__init__(self, *args, **kwargs) self._keepRunning = True def stop(self, timeout=None): self._keepRunning = False # optional: wait for thread to exit self.join(timeout=timeout) def run(self): while self._keepRunning: # do stuff here Now you can do things like this: thread = MyThread() thread.start() # other stuff... thread.stop() # block here until the thread exits I hope that clarifies things a little more... -Peter -- http://mail.python.org/mailman/listinfo/python-list