bpo-33056 FIX leaking fd in concurrent.futures.ProcessPoolExecutor (GH-6084) (#6092)

(cherry picked from commit 095ee415ce)

Co-authored-by: Thomas Moreau <thomas.moreau.2010@gmail.com>
This commit is contained in:
Miss Islington (bot) 2018-03-13 02:10:57 -07:00 committed by Antoine Pitrou
parent e32bbaf376
commit f216cbf9ab
2 changed files with 10 additions and 2 deletions

View file

@ -78,11 +78,13 @@ _global_shutdown = False
class _ThreadWakeup: class _ThreadWakeup:
__slot__ = ["_state"]
def __init__(self): def __init__(self):
self._reader, self._writer = mp.Pipe(duplex=False) self._reader, self._writer = mp.Pipe(duplex=False)
def close(self):
self._writer.close()
self._reader.close()
def wakeup(self): def wakeup(self):
self._writer.send_bytes(b"") self._writer.send_bytes(b"")
@ -654,6 +656,11 @@ class ProcessPoolExecutor(_base.Executor):
self._call_queue = None self._call_queue = None
self._result_queue = None self._result_queue = None
self._processes = None self._processes = None
if self._queue_management_thread_wakeup:
self._queue_management_thread_wakeup.close()
self._queue_management_thread_wakeup = None
shutdown.__doc__ = _base.Executor.shutdown.__doc__ shutdown.__doc__ = _base.Executor.shutdown.__doc__
atexit.register(_python_exit) atexit.register(_python_exit)

View file

@ -0,0 +1 @@
FIX properly close leaking fds in concurrent.futures.ProcessPoolExecutor.