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

コマンドが順番に実行されない理由は何ですか?

4

1 に答える 1

0

プロセスのプールを作成しているため、コマンドは実際には順番に開始されますが、どのプロセスが最初に終了するかは保証されません。コードを実行するたびに順序が変わることに気付くでしょう。

于 2014-12-04T17:44:24.103 に答える