Caleb Hattingh <caleb.hatti...@gmail.com> added the comment:

@dontbugme This is a very old problem with threads and sub-processes.  In the 
general case (cross-platform, etc) it is difficult to kill threads and 
sub-processes from the outside. The traditional solution is to somehow send a 
message to the thread or subprocess to tell it to finish up. Then, you have to 
write the code running the thread or subprocess to notice such a message, and 
then shut itself down. With threads, the usual solution is to pass `None` on a 
queue, and have the thread pull data off that queue. When it receives a `None` 
it knows that it's time to shut down, and the thread terminates itself. This 
model can also be used with the multiprocessing module because there is a Queue 
instance provided there that works across the inter-process boundary.  
Unfortunately, we don't have that feature in the asyncio subprocess machinery 
yet. For subprocesses, there are three options available:

1) Send a "shutdown" sentinal via STDIN (asyncio.subprocess.Process.communicate)
2) Send a process signal (via asyncio.subprocess.Process.send_signal)
3) Pass messages between main process and child process via socket connections

My experience has been that (3) is the most practical, esp. in a cross-platform 
sense. The added benefit of (3) is that this also works, unchanged, if the 
"worker" process is running on a different machine. There are probably things 
we can do to make (3) easier. Not sure.

I don't know if my comment helps, but I feel your pain. You are correct that 
`wait_for` is not an alternative to `timeout` because there is no actual 
cancellation that happen.

----------
nosy: +cjrh

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

Reply via email to