我一直百思不得其解這個現在整整一夜......蟒蛇平行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