New submission from William D. Jones <wjo...@wdj-consulting.com>:

On Windows 7, when using ProactorEventLoop, when asyncio.subprocess.terminate 
is called on the last subprocess when multiple subprocesses are spawned*, the 
last subprocess will never exit, and the Python interpreter will never exit. 

Spawning an instance of "TASKKILL /F" to kill the subprocess, and then awaiting 
asyncio.subprocess.wait is a workaround. Since both "TASKKILL /F" and 
asyncio.subprocess.terminate ultimately call TerminateProcess, I would expect 
the same behavior using both (without the need to wait for the subprocess to 
actually die).

I have confirmed this behavior on Python 3.5, 3.6, and 3.7 on both MSVC and 
MinGW Python (although I most frequently use the latter).

Zip file is too large, so I have a GH repo (ready to run) demonstrating this 
issue: https://github.com/cr1901/proactor

An example run looks like the following:$ python3 proactor.py
Infinite Loop, Iteration 0
Finite Loop, Iteration 0
Infinite Loop, Iteration 1
Finite Loop, Iteration 1
Infinite Loop, Iteration 2
Finite Loop, Iteration 2
Finite Loop, Iteration 3
Infinite Loop, Iteration 3
Infinite Loop, Iteration 4
Task poller finished.

The interpreter hangs after the "Task poller finished." line, which makes me 
believe that the Python interpreter is trying and failing to cleanup resources 
for some reason (IOCP never completes?).

*Each subprocess is associated with its own coroutine to handle standard output.

----------
components: Windows, asyncio
messages: 346345
nosy: asvetlov, cr1901, paul.moore, steve.dower, tim.golden, yselivanov, 
zach.ware
priority: normal
severity: normal
status: open
title: Script using ProactorEventLoop does not exit cleanly on Windows with 
multiple subprocesses
type: behavior
versions: Python 3.5, Python 3.6, Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37381>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to