KeyboardInterrupt being lost?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Operation Latte Thunder

    #1

    KeyboardInterrupt being lost?

    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
    KeyboardInterru pts 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.Threa d ):
    def __init__ ( self ):
    threading.Threa d.__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
  • David  Wahler

    #2
    Re: KeyboardInterru pt being lost?

    Operation Latte Thunder wrote:[color=blue]
    > 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
    > KeyboardInterru pts 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.Threa d ):
    > def __init__ ( self ):
    > threading.Threa d.__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[/color]

    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

    Comment

    Working...