gpt4 book ai didi

python - 为什么多进程池比 for 循环慢?

转载 作者:太空狗 更新时间:2023-10-30 01:47:47 25 4
gpt4 key购买 nike

from multiprocessing import Pool

def op1(data):
return [data[elem] + 1 for elem in range(len(data))]
data = [[elem for elem in range(20)] for elem in range(500000)]

import time

start_time = time.time()
re = []
for data_ in data:
re.append(op1(data_))

print('--- %s seconds ---' % (time.time() - start_time))

start_time = time.time()
pool = Pool(processes=4)
data = pool.map(op1, data)

print('--- %s seconds ---' % (time.time() - start_time))

与使用 for 循环相比,我使用 pool 的运行时间要慢得多。但是池不是应该使用 4 个处理器来并行计算吗?

最佳答案

简短回答:,操作通常在可用核心(的子集)上完成。但是通信开销很大在您的示例中,与开销相比工作量太小

如果您构建一个池,将构建多个worker。如果您随后指示 map 给定输入。发生以下情况:

  1. 数据将被拆分:每个 worker 得到大致公平的份额;
  2. 数据将传达给 worker ;
  3. 每个 worker 都将处理他们分担的工作;
  4. 结果传回流程;和
  5. 主要过程将结果组合在一起

现在拆分、通信和连接数据都是由主进程执行的过程。这些不能并行化。由于操作速度很快(O(n),输入大小为 n),开销具有相同的时间复杂度

如此复杂,即使您拥有数百万个内核,也不会产生太大影响,因为传达列表可能已经比计算结果更昂贵。

这就是为什么您应该并行化计算量大的任务。不是简单的任务。与通信量相比,处理量应该

在您的示例中,工作微不足道:您将所有元素加 1。然而,序列化并不那么简单:您必须对发送给工作人员的列表进行编码。

关于python - 为什么多进程池比 for 循环慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com