2014-12-03 80 views
0

我對python和'multiprocessing'模塊特別新。不過,我已經設法編寫了一個非常簡單的腳本來在24個cpus上運行多個進程(比如說100)。 但是,我注意到該進程不是按順序運行,而是隨機運行。 是否有順序運行進程的方法。 這裏是我的代碼:Python多處理.pool順序運行的進程

#!/usr/bin/env python 

import multiprocessing 
import subprocess 




def prcss(cmd): 
    sbc = subprocess.call 
    com = sbc(cmd, shell='True') 
    return (com) 


if __name__=='__main__': 

    cmd = [] 
    for j in range(1,11): 
    for i in range(10): 
     sis = '~/codes-paul/sisyphus/sisyphus '+str(j)+'/sisyphus.setup > '+str(j)+'/out'+str(i)+'.dat' 
     cmd.append(sis) 


    pool=multiprocessing.Pool(processes=24) 
    pool.map(prcss,cmd) 

後,我已運行Python代碼,我做「PS -ef | grep myname'。 非但沒有的:

'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out0.dat.dat' 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out1.dat.dat 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out2.dat.dat 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out3.dat.dat 
. 
. 
. 
. 
.I am getting: 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out0.dat.dat' 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out3.dat.dat 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out6.dat.dat 
'/bin/sh -c ~/codes-paul/sisyphus/sisyphus > 1/sisyphus.setup > 1/out9.dat.dat 
. 
. 
. 
. 

任何想法,爲什麼這些命令不按順序運行?

回答

0

由於您正在創建一個進程池,這些命令實際上是按順序啓動的,但您無法保證哪個進程將首先完成。 您會注意到訂單幾乎每次運行代碼時都會發生變化。

+0

非常感謝您的回答!我以爲我做錯了什麼? – user3578925 2014-12-04 19:28:45