Python多处理 - 并行处理

时间:2016-11-06 09:17:10

标签: python multiprocessing

我是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.Poolapply_async作为我之前链接的问题的答案的解决方案,所以我最感兴趣的是一个不使用这些的解决方案。

1 个答案:

答案 0 :(得分:0)

是的,这将并行运行。

在尝试加入一个进程之前,所有进程都会启动,因此在第一个进程之后不会阻塞。