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.
This commit is contained in:
Victor Stinner 2017-07-26 02:32:42 +02:00 committed by GitHub
parent 627d2c8e8d
commit 2db64823c2
1 changed files with 8 additions and 2 deletions

View File

@ -148,10 +148,16 @@ class BaseProcess(object):
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):
'''