thread; interrupt_main() doesn't seem to work?

Steve Holden steve at holdenweb.com
Sun Nov 21 16:07:03 EST 2004


Jerry Sievers wrote:

> Fellow Pythonists; According to the docs
> 
> +-----------------+
> |interrupt_main(|)|
> +-----------------+
> 
>           Raise a KeyboardInterrupt in the main thread. A subthread can use
>      this function to interrupt the main thread. New in version 2.3.
> 
> Therefore, I was expecting this short test prog to run and then finish
> with the KeyboardInterrupt exception at the bottom in the pause
> routine.  It doesn't stop there but I can do a manual keyboard
> interrupt and get the expected bactrace and program exit.
> 
> ---
> 
> from signal import pause
> from socket import socket
> from thread import start_new_thread, interrupt_main
> from time import sleep
> 
> def go():
>     print 'go'
>     while f.readline():
>         print 'line'
>     print 'empty'
>     interrupt_main()
>     print 'done'
> 
> s = socket()
> s.connect(('localhost', 80))
> f = s.makefile()
> print 'connected'
> 
> start_new_thread(go, ())
> 
> sleep(2)
> s.shutdown(2)
> pause()  # expecting to get KeyboardInterrupt exception here
> 
> ---
> 
> connected
> go
> empty
> done
> ....hangs here as if interrupt_main() does nothing.
> 
> Manual Control-C required to wake up from pause() and exit.
> 
> Traceback (most recent call last):
>   File "test.py", line 23, in ?
>     pause()  # expecting to get KeyboardInterrupt exception here
> KeyboardInterrupt
> 
> Python 2.3.3 on RedHat 7x.
> 
> Wondering what's wrong?
> 
> Thanks
> 
> 
Perhaps the main thread has to actually be running to respond to the 
raised exception. Did you try a shortish sleep() instead of the pause? 
That would at least test this theory.

regards
  Steve
-- 
http://www.holdenweb.com
http://pydish.holdenweb.com
Holden Web LLC +1 800 494 3119



More information about the Python-list mailing list