并行子进程python

时间:2017-08-30 17:12:32

标签: python subprocess

我正在尝试在Python 2.7中并行运行shell命令列表作为子进程(每次4个)。注意 cmds 是代码中其他位置生成的有效字符串列表。这是我到目前为止的地方......

from multiprocessing import Pool 
import subprocess

def worker(cmd):
    print cmd 
    subprocess.Popen(cmd, shell=true)

pool = Pool(4)
for cmd in cmds:
    pool.apply_async(worker, [cmd])

从这里我得到没有输出也没有错误。非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

也许你的脚本在流程运行之前就结束了?

我尝试了你的代码,我遇到了同样的问题。 要解决它,你应该关闭池( Pool.close())并等待进程结束( Pool.join())。 检查一下:

from multiprocessing import Pool
import subprocess

cmds=['str1', 'str2', 'str3', 'str4']

def worker(cmd):
    print cmd
    p = subprocess.Popen(cmd, shell=true)
    p.wait()

pool = Pool(4)
for cmd in cmds:
    pool.apply_async(worker, [cmd])

pool.close()
pool.join()

输出:

str1
str2
str3
str4