Python多处理.pool进程的顺序运行 [英] Python multiprocessing.pool sequential run of processes

查看:10
本文介绍了Python多处理.pool进程的顺序运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我还是个新手,尤其是对"多处理"模块。然而,我已经设法编写了一个非常简单的脚本来在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 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
.
.
.
.

我收到:

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

知道为什么这些命令没有按顺序运行吗?

推荐答案

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

这篇关于Python多处理.pool进程的顺序运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆