我一直百思不得其解这个现在整整一夜......蟒蛇平行POPEN
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结果?
P.S.如果我以串行方式运行此代码(即使用subprocess.call而不是Popen),它可以正常工作。
我还试图用多模块,不幸的是,我可以克服unpickle问题,因为我试图启动的进程池的一类... – Patrick
我认为这是一个复制/粘贴错误,但是不应该将'm'传递给'Popen'调用而不是'module'? – jro
@jro是啊,好眼睛!我修复了错字。 – Patrick