了解python多处理:代码是否等待所有进程完成

时间:2017-03-27 21:47:34

标签: python multiprocessing

我有一段代码如下:

Data = [1, 2, 3, 4, 5]
def Fn2(obj):
  return 2*obj

p = Pool(multiprocessing.cpu_count())
valueList = p.map(Fn2, Data) #---question Line 1
valueList = 2*valueList  #--question Line 2

Line 1,处理器返回的值存储在valueList中。我的电脑上有8个核心。最初将作业分配给所有核心。当让我们说8个核心时,5个核心可以释放。其余核心是否会跳转到Line 2或等待所有核心完成作业并填满valueList,然后继续Line 2

如何测试答案?

1 个答案:

答案 0 :(得分:1)

  

其余核心是否跳转到第2行

没有

  

如何测试答案?

如果对并行运行的代码存在疑问,请添加sleep s。如果对一般代码有疑问,请添加print s。

import multiprocessing
from time import sleep

from multiprocess import Pool

Data = [1, 2, 3, 4, 5]

def Fn2(obj):
    print(obj)
    sleep(2)
    return 2 * obj

p = Pool(multiprocessing.cpu_count())
valueList = p.map(Fn2, Data)  # ---question Line 1
print(valueList)
valueList = 2 * valueList  # --question Line 2

这给出了以下输出:

1
2
3
4
5
[2, 4, 6, 8, 10]

根据时间安排,应该清楚发生了什么。尝试将池大小调整为3或其他东西以进一步试验。