1

我对 python 尤其是“多处理”模块很陌生。但是,我设法编写了一个非常简单的脚本来在 24 个 CPU 上运行多个进程(比如 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 我的名字'。而不是得到:

'/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
.
.
.
.

我正进入(状态:

'/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 
.
.
.
.

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

4

1 回答 1

0

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

于 2014-12-04T17:44:24.103 回答