3

Popen用来维护 Python 程序中的子进程池。在我的程序中有自然点来执行“清理”——在这些点上我调用Popen.poll()以确定特定进程是否仍在运行,如果没有,我Popen从池中删除它的对象并回收它正在使用的任何资源。

是否需要调用Popen.wait()才能执行某种语言或操作系统级别的清理?调用Popen.poll()已经确定进程已经终止,它甚至设置了returncode属性。还有其他理由打电话Popen.wait()吗?

4

1 回答 1

3

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.

于 2013-08-28T15:56:07.660 回答