gpt4 book ai didi

python 并行 Popen

转载 作者:行者123 更新时间:2023-12-01 06:05:16 35 4
gpt4 key购买 nike

我整个晚上都在困惑这个问题......

makeflags = ['--prefix=/usr','--libdir=/usr/lib']
rootdir='/tmp/project'
ps = set()

def configModule(m):
print m
return Popen(["./autogen.sh"] + makeflags, cwd=rootdir+"/"+m)

for module in ['mod1','mod2','mod3' ... 'mod10']:
ps.add(configModule(module))

os.wait()

我预计它将启动 10 个进程并并行执行 ./autogen.sh。然而,我观察到,前几个 configModule 似乎在调用函数后就退出了。我只看到“print m”语句,但看不到“mod1”中 ./autogen.sh 的实际输出。然而,大约在 mod4 之后,代码开始并行运行。我可以看到 CPU 利用率很高,并且输出已在不同的模块文件夹中生成。

知道为什么前几个模块没有产生 ./autogen.sh 结果吗?

附注如果我串行运行此代码(即使用 subprocess.call 而不是 Popen),它可以正常工作。

最佳答案

您的代码适用于我,并且应该启动所有进程。您没有给我们太多的帮助:行为有何不同?

您没有在粘贴的代码中重定向输出,因此您可能会看到子级的 stderr 流。但有一件事是:

os.wait()

…只会等待 1 个进程。您可能想要使用 Popen 的返回值,并在每个子进程上调用 waitcommunicate。然后,您还可以使用返回值来确保它们全部成功终止:

# Instead of os.wait():
for p in ps:
p.wait()
print 'A process returned:', p.returncode

希望,如果一切正常,它们都应该为 0。

关于python 并行 Popen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8322841/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com