【发布时间】: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.Pool 和 apply_async 发布的解决方案,作为我之前链接的问题的答案,所以我最感兴趣的是不使用这些的解决方案。
【问题讨论】:
-
听起来正确。您应该使用系统工具检查
M进程实际上是同时运行的。