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