KeyboardInterrupt being lost?
David Wahler
dwahler at gmail.com
Fri Oct 14 17:18:39 EDT 2005
Operation Latte Thunder wrote:
> I have a simple test proggie that isn't behaving like I expect ( found
> below ). The script will infinitely run ( as expected ), but seems to
> completely ignore control-C's. Shouldn't the interpreter pass along
> KeyboardInterrupts and break out of the while loop, or am I missing
> something?
>
> Using python 2.4.2 on linux ( if it matters )
>
> -- Script Below --
>
> import threading, traceback, time
>
> class TestThread ( threading.Thread ):
> def __init__ ( self ):
> threading.Thread.__init__ ( self )
> def run ( self ):
> print "Starting..."
> while True:
> time.sleep ( 1 )
> return
>
> if __name__ == '__main__':
> test = TestThread ( )
> test.start()
> print "Started..."
> test.join()
>
>
> --
> chris
Chris,
Thread.join() is implemented using a lock, and the acquisition of a
lock is uninterruptible. (See
http://docs.python.org/lib/module-thread.html) Therefore, your main
thread will block until the other thread terminates or the process is
forcibly killed. Even if it could be interrupted, I don't think there's
any way to raise that exception in the other thread. (Python's
threading support leaves something to be desired when compared to, say,
Java.)
-- David
More information about the Python-list
mailing list