【发布时间】:2012-01-09 12:08:17
【问题描述】:
我整晚都在困惑这个问题......
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)它可以正常工作。
【问题讨论】:
-
我也尝试过使用多处理模块,不幸的是,当我尝试在一个类中启动一个进程池时,我可以克服 unpickle 问题...
-
我认为这是一个复制/粘贴错误,但不应将
m传递给Popen调用而不是module? -
@jro 是的,好眼睛!我已经修正了错字。
标签: python parallel-processing multiprocessing subprocess