我是Python多处理的新手,我正在尝试实现一些并行计算。我得到的信息是:
#M is an integer, contains the number of processes I'd like to launch.
results = []
for i in range(0, M):
p = Process(target=processchild, args=(data[i],q))
p.start()
result.append(q.get())
p.join()仍然是连续的,因为.join()会导致循环等待,直到p完成后再启动下一个循环。我读过here的答案
您要么希望在for循环之外单独地加入您的进程(例如,将它们存储在一个列表中,然后迭代它).
所以如果我修改我的代码
results = []
for i in range(0, M):
processes[i] = Process(target=processchild, args=(data[i],q))
processes[i].start()
result.append(q.get())
for i in range(0, M):
processes[i].join()它现在真的会并行运行吗?如果没有,我如何修改我的代码以这样的方式工作?我阅读了使用numpy.Pool和apply_async发布的解决方案,作为我之前链接的问题的答案,所以我对不使用这些问题的解决方案很感兴趣。
发布于 2016-11-06 09:20:27
是的,这将并行进行。
所有进程都是在尝试加入一个进程之前启动的,因此这不会在第一个进程之后阻塞。
https://stackoverflow.com/questions/40447724
复制相似问题