从 subprocess.Popen 到多处理

Dor*_*hen 4 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
        ...
Run Code Online (Sandbox Code Playgroud)

我使用循环从其他函数调用此函数(例如 from range(1,100) ),如何使用多处理对函数进行多次调用?每次都会有几个进程并行运行

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

谢谢你的帮助

Max*_*ers 6

只需将索引添加到您的Popen调用中,然后创建一个具有可用 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))
Run Code Online (Sandbox Code Playgroud)

  • 无需将 `cpu_count` 参数传递给 `Pool`。默认情况下,Python 会为你做这件事。 (2认同)
  • @noxdafox 感谢您的关注!这其实是为了让事情变得更清楚,否则看起来就像魔术一样。 (2认同)