[issue29926] IDLE: in shell, time.sleep ignores _thread.interrupt_main()
Eryk Sun
report at bugs.python.org
Thu Jun 29 13:21:47 EDT 2017
Eryk Sun added the comment:
> interrupt_main is now equivalent to the user having hit control-C.
That's true on a POSIX system with pthread_kill, but not really for a Windows process that's attached to a console.
A real Ctrl+C executes the registered control handlers for the process. To emulate this, PyErr_SetInterrupt could try calling GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0) to broadcast a Ctrl+C event. If the latter fails, it can fall back on raise(SIGINT), such as when the process isn't attached to a console.
One problem is that GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0) doesn't cancel a blocking console read like Ctrl+C does. Python's C handler could call CancelSynchronousIo(hMainThread) to address this problem in general. Unfortunately, when a console read is canceled in the client, it isn't canceled in the console itself. The contents of the read will be discarded, but it's a bit clunky that the user has to press enter.
----------
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue29926>
_______________________________________
More information about the Python-bugs-list
mailing list