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