Skip to content

Commit

Permalink
bpo-31326: ProcessPoolExecutor waits for the call queue thread (pytho…
Browse files Browse the repository at this point in the history
…n#3265)

* bpo-31326: ProcessPoolExecutor waits for the call queue thread

concurrent.futures.ProcessPoolExecutor.shutdown() now explicitly
closes the call queue. Moreover, shutdown(wait=True) now also join
the call queue thread, to prevent leaking a dangling thread.

* Fix for shutdown() being called twice.
  • Loading branch information
vstinner authored Sep 1, 2017
1 parent 97e1b1c commit b713adf
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
6 changes: 5 additions & 1 deletion Lib/concurrent/futures/process.py
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,11 @@ def shutdown(self, wait=True):
# To reduce the risk of opening too many files, remove references to
# objects that use file descriptors.
self._queue_management_thread = None
self._call_queue = None
if self._call_queue is not None:
self._call_queue.close()
if wait:
self._call_queue.join_thread()
self._call_queue = None
self._result_queue = None
self._processes = None
shutdown.__doc__ = _base.Executor.shutdown.__doc__
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
concurrent.futures.ProcessPoolExecutor.shutdown() now explicitly closes the
call queue. Moreover, shutdown(wait=True) now also join the call queue
thread, to prevent leaking a dangling thread.

0 comments on commit b713adf

Please sign in to comment.