[Python-checkins] bpo-31019: Fix multiprocessing.Process.is_alive() (#2875)

Victor Stinner webhook-mailer at python.org
Tue Jul 25 20:32:46 EDT 2017


https://github.com/python/cpython/commit/2db64823c20538a6cfc6033661fab5711d2d4585
commit: 2db64823c20538a6cfc6033661fab5711d2d4585
branch: master
author: Victor Stinner <victor.stinner at gmail.com>
committer: GitHub <noreply at github.com>
date: 2017-07-26T02:32:42+02:00
summary:

bpo-31019: Fix multiprocessing.Process.is_alive() (#2875)

multiprocessing.Process.is_alive() now removes the process from the
_children set if the process completed.

The change prevents leaking "dangling" processes.

files:
M Lib/multiprocessing/process.py

diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py
index ce4ce43cfca..8e500dc93dc 100644
--- a/Lib/multiprocessing/process.py
+++ b/Lib/multiprocessing/process.py
@@ -148,10 +148,16 @@ def is_alive(self):
         if self is _current_process:
             return True
         assert self._parent_pid == os.getpid(), 'can only test a child process'
+
         if self._popen is None:
             return False
-        self._popen.poll()
-        return self._popen.returncode is None
+
+        returncode = self._popen.poll()
+        if returncode is None:
+            return True
+        else:
+            _children.discard(self)
+            return False
 
     def close(self):
         '''



More information about the Python-checkins mailing list