我有一个函数,它使用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上工作)
感谢您的帮助
答案 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))