Python multiprocessing.pool顺序运行进程

时间:2014-12-03 22:02:25

标签: python-multiprocessing

我是python的新手,特别是'多处理'模块。但是,我设法编写了一个非常简单的脚本来在24 cpus上运行多个进程(比如说100)。 但是,我注意到该过程不是按顺序运行,而是随机运行。 有没有办法按顺序运行进程。 这是我的代码:

#!/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 
.
.
.
.

知道为什么命令不按顺序运行?

1 个答案:

答案 0 :(得分:0)

由于您正在创建进程池,因此命令实际上是按顺序启动的,但您无法保证首先完成哪个进程。 您会注意到,每次运行代码时订单都会有所不同。