在Python中生成和等待子进程

2024-10-01 17:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

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

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

它必须运行的环境是CentOS和Python2.4,但是我正在用Python2.5测试Cygwin,所以可能是在我的机器上失败了,但在Linux上可以工作(Linux机器非常慢,而且这个错误很少见,所以我无法在那里获得它)。在


Tags: 代码in机器forsize进程oslinux
2条回答

我建议您安装python-subprocess32一个健壮的Python3版本的subprocess标准库模块,适合于Python2.4到2.7,也是迄今为止在Python2中运行子进程的最佳方式。然后,在循环中你会这样做

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

下面的循环将是一个简单的

^{pr2}$

建议启动子进程的方法是使用subprocess模块。在

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

相关问题 更多 >

    热门问题