我对python,特别是'multiprocessing'模块很陌生。但是,我已经设法编写了一个非常简单的脚本来在 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
.
.
.
.
知道为什么命令不按顺序运行吗?
由于您正在创建进程池,因此命令实际上是按顺序启动的,但您无法保证哪个进程将首先完成。您会注意到,每次运行代码时,顺序几乎都会有所不同。