Skip to content

Commit

Permalink
bpo-30886: Fix multiprocessing.Queue.join_thread() (#2642) (#2644)
Browse files Browse the repository at this point in the history
multiprocessing.Queue.join_thread() now waits until the thread
completes, even if the thread was started by the same process which
created the queue.

Fix the following warning which occurs randomly when running
test_handle_called_with_mp_queue of test_logging.QueueListenerTest:

Warning -- threading_cleanup() failed to cleanup -1 threads after 4 sec (count: 0, dangling: 1)
(cherry picked from commit 3b69d91)
  • Loading branch information
vstinner committed Jul 10, 2017
1 parent 68c3724 commit 69e4180
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 8 deletions.
9 changes: 1 addition & 8 deletions Lib/multiprocessing/queues.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,14 +169,7 @@ def _start_thread(self):
self._thread.start()
debug('... done self._thread.start()')

# On process exit we will wait for data to be flushed to pipe.
#
# However, if this process created the queue then all
# processes which use the queue will be descendants of this
# process. Therefore waiting for the queue to be flushed
# is pointless once all the child processes have been joined.
created_by_this_process = (self._opid == os.getpid())
if not self._joincancelled and not created_by_this_process:
if not self._joincancelled:
self._jointhread = Finalize(
self._thread, Queue._finalize_join,
[weakref.ref(self._thread)],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix multiprocessing.Queue.join_thread(): it now waits until the thread
completes, even if the thread was started by the same process which created
the queue.

0 comments on commit 69e4180

Please sign in to comment.