2014-12-03 1 views
0

Я довольно новичок в python и в частности в модуле «многопроцессорности». Однако мне удалось написать очень простой скрипт для запуска нескольких процессов (скажем, 100) по 24 cpus. Однако я заметил, что процесс выполняется не последовательно, а случайным образом. Есть ли способ для запуска процессов последовательно. Вот мой код:Python multiprocessing.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, я «пс -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