Pablo Galindo Salgado <pablog...@gmail.com> added the comment:

Unless I don't understand the issue correctly, this is documented here:

https://docs.python.org/3/library/multiprocessing.html#multiprocessing-programming

Bear in mind that a process that has put items in a queue will wait before 
terminating until all the buffered items are fed by the “feeder” thread to the 
underlying pipe. (The child process can call the Queue.cancel_join_thread 
method of the queue to avoid this behaviour.)

This means that whenever you use a queue you need to make sure that all items 
which have been put on the queue will eventually be removed before the process 
is joined. Otherwise you cannot be sure that processes which have put items on 
the queue will terminate. Remember also that non-daemonic processes will be 
joined automatically.


In you example, if you add:

ch._queue.get()

before raising the exception, the program does not hang anymore once the item 
is taken out of the queue.

----------
nosy: +pablogsal

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

Reply via email to