From b469ab8802fa6e3e78ae712e773f262e23eebe90 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 24 Jul 2017 19:36:55 +0200 Subject: [PATCH] multiprocessing.Pool.terminate() joins all processes bpo-31019: Pool.terminate() now also joins "dead" processes even if their is_alive() method returns false. The change prevents leaking "dangling" processes. --- Lib/multiprocessing/pool.py | 6 ++---- .../next/Library/2017-07-24-19-38-49.bpo-31019.Kk8H5i.rst | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2017-07-24-19-38-49.bpo-31019.Kk8H5i.rst diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py index c2364ab186c3282..4e33793b91015f0 100644 --- a/Lib/multiprocessing/pool.py +++ b/Lib/multiprocessing/pool.py @@ -599,10 +599,8 @@ def _terminate_pool(cls, taskqueue, inqueue, outqueue, pool, if pool and hasattr(pool[0], 'terminate'): util.debug('joining pool workers') for p in pool: - if p.is_alive(): - # worker has not yet exited - util.debug('cleaning up worker %d' % p.pid) - p.join() + util.debug('cleaning up worker %d' % p.pid) + p.join() def __enter__(self): return self diff --git a/Misc/NEWS.d/next/Library/2017-07-24-19-38-49.bpo-31019.Kk8H5i.rst b/Misc/NEWS.d/next/Library/2017-07-24-19-38-49.bpo-31019.Kk8H5i.rst new file mode 100644 index 000000000000000..f2dd76741e13715 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-07-24-19-38-49.bpo-31019.Kk8H5i.rst @@ -0,0 +1,3 @@ +multiprocessing.Pool.terminate() now also joins "dead" processes even if +their is_alive() method returns false. The change prevents leaking +"dangling" processes.