【问题标题】:Python Multiprocessing - Parrallel processesPython 多处理 - 并行进程
【发布时间】:2016-11-06 09:17:10
【问题描述】:

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

【问题讨论】:

  • 听起来正确。您应该使用系统工具检查M 进程实际上是同时运行的。

标签: python multiprocessing


【解决方案1】:

是的,这将并行运行。

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

【讨论】:

  • @robyschek 我可以将q.get() 添加到join() 之后的第二个循环吗?这是否意味着正确的并行运行?
  • @robyschek 谢谢!
  • @robyschek 由于您的答案是正确的,如果您将其添加为答案,我会接受! :)