从subprocess.Popen到多处理

时间:2016-10-09 11:52:47

标签: python multiprocessing

我有一个函数,它使用subprocess.Popen以下列方式调用进程:

    def func():
        ...
        process = subprocess.Popen(substr, shell=True, stdout=subprocess.PIPE)

        timeout = {"value": False}
        timer = Timer(timeout_sec, kill_proc, [process, timeout])
        timer.start()

        for line in process.stdout:
            lines.append(line)

        timer.cancel()
        if timeout["value"] == True:
            return 0
        ...

我使用循环从其他函数调用此函数(例如从范围(1,100)),如何通过多处理多次调用该函数?每次有几个进程并行运行

流程并不依赖于彼此,唯一的限制是每个流程只能在一个索引上“工作”(例如,没有两个流程可以在索引1上工作)

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

只需将索引添加到Popen来电,然后创建一个worker pool,其中包含尽可能多的CPU内核。

import multiprocessing

def func(index):
    ....
    process = subprocess.Popen(substr + " --index {}".format(index), shell=True, stdout=subprocess.PIPE)
    ....

if __name__ == '__main__':
    p = multiprocessing.Pool(multiprocessing.cpu_count())
    p.map(func, range(1, 100))