Roger Serwy <[email protected]> added the comment:
Andrew, the reason the subprocess is not closing is due to a thread management
problem. I found that a dummy thread handles cvar.wait() which is why the
subprocess fails to terminate properly.
If you change the tight loop in _getresponse to be:
while myseq not in self.responses:
print(threading.enumerate(), file=sys.__stderr__)
sys.__stderr__.flush()
cvar.wait(1)
Then you'll get the following dumped to the terminal once a second:
[<_DummyThread(Dummy-1, started daemon 139991862630176)>,
<Thread(SockThread, started daemon 139991766066944)>]
The MainThread already stopped, but these two daemon threads don't terminate,
which is strange. Is this a bug in itself?
Polling the OS for the IDLE frontend process will give an indication to
terminate the subprocess, but actually terminating the subprocess from within
the subprocess is the main problem.
Attached is a patch which takes a different approach to terminating the
subprocess by using .shutdown instead.
----------
Added file: http://bugs.python.org/file25112/issue14440_rev2.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue14440>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com