在Python中产生和等待子进程

时间:2010-06-07 21:59:15

标签: python linux cygwin process

代码的相关部分如下所示:

pids = [] 
for size in SIZES:
    pids.append(os.spawnv(os.P_NOWAIT, RESIZECMD, [RESIZECMD, lotsOfOptions]))

# Wait for all spawned imagemagick processes to finish
while pids:
    (pid, status) = os.waitpid(0, 0)
    if pid:
        pids.remove(pid)

这应该做的是关闭所有进程,然后在继续之前等待每个进程完成。它的作用大部分都是有效的,但有时会在下一部分崩溃(当它期望完成所有这些过程时)。

这有什么问题吗?有没有更好的方法呢?

它必须处理的环境是使用Python 2.4的CentOS,但我正在使用Python 2.5测试Cygwin,因此可能是因为它在我的机器上失败但在Linux机器上运行(Linux机器非常慢,这个错误是罕见的,所以我无法在那里得到它。

2 个答案:

答案 0 :(得分:5)

启动子进程的推荐方法是使用subprocess模块。

pipe = Popen(["program", "arg1", "arg2"])
pipe.wait()

答案 1 :(得分:3)

我建议你安装python-subprocess32 - 一个强大的Python 3版本的subprocess标准库模块,适用于Python 2.4到2.7,是目前运行子进程的最佳方法。 Python 2.然后,在循环中你将做

pids.append(subprocess.Popen([RESIZECMD, lot, of, options])

以下循环只是一个简单的

for pid in pids:
    pid.wait()