我Popen
用来维护 Python 程序中的子进程池。在我的程序中有自然点来执行“清理”——在这些点上我调用Popen.poll()
以确定特定进程是否仍在运行,如果没有,我Popen
从池中删除它的对象并回收它正在使用的任何资源。
是否需要调用Popen.wait()
才能执行某种语言或操作系统级别的清理?调用Popen.poll()
已经确定进程已经终止,它甚至设置了returncode
属性。还有其他理由打电话Popen.wait()
吗?
我Popen
用来维护 Python 程序中的子进程池。在我的程序中有自然点来执行“清理”——在这些点上我调用Popen.poll()
以确定特定进程是否仍在运行,如果没有,我Popen
从池中删除它的对象并回收它正在使用的任何资源。
是否需要调用Popen.wait()
才能执行某种语言或操作系统级别的清理?调用Popen.poll()
已经确定进程已经终止,它甚至设置了returncode
属性。还有其他理由打电话Popen.wait()
吗?
wait
不,如果你打电话,你不必打电话poll
。他们基本上做同样的事情,除了wait
无限等待。
poll
:
if self.returncode is None:
if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
self.returncode = _GetExitCodeProcess(self._handle)
return self.returncode
wait
:
if self.returncode is None:
_subprocess.WaitForSingleObject(self._handle,
_subprocess.INFINITE)
self.returncode = _subprocess.GetExitCodeProcess(self._handle)
return self.returncode
这是该subprocess
模块的 windows 实现代码,但所有其他应遵循相同的规则。
在 MacOS X 上,我假设 Linux 的实现是相同的,它们都调用os.waitpid
.