Python多处理:为什么较大的chunksize较慢?

时间:2016-11-25 06:45:29

标签: python parallel-processing multiprocessing python-multiprocessing

我一直使用Python的多处理模块对一些代码进行概要分析('作业'函数只是对数字进行平方)。

data = range(100000000)
n=4
time1 = time.time()
processes = multiprocessing.Pool(processes=n)
results_list = processes.map(func=job, iterable=data, chunksize=10000)
processes.close()
time2 = time.time()
print(time2-time1)
print(results_list[0:10])

我发现奇怪的一件事是最佳的chunksize似乎是大约10k元素 - 这在我的计算机上耗时16秒。如果我将chunksize增加到100k或200k,那么它会减慢到20秒。

这种差异可能是由于长时间列表中酸洗所需的时间更长吗? 100个元素的块大小需要62秒,我假设是由于在不同进程之间来回传递块所需的额外时间。

1 个答案:

答案 0 :(得分:10)

关于最佳chunksize:

  1. 拥有大量小块可以让4名不同的工人更有效地分配负载,因此需要更小的块。
  2. 另一方面,每次必须处理新块时,与进程相关的上下文更改都会增加开销,因此需要更少的上下文更改,因此需要更少的块。
  3. 由于这两条规则都需要不同的方法,因此中间的一点是可行的方法,类似于供需图表。