我有4个python列表,它由2个项目的内部列表组成:
a = [[1,2], [3,4], ...]
b = [[5,2], [2,4], ...]
c = [[7,2], [5,4], ...]
d = [[8,2], [4,4], ...]
我可以像这样连续地对内部列表求和:
for list in [a,b,c,d]:
total = 0
for [x,y] in list:
total += x + y
print("total is: ", total)
假设每个列表的每次求和操作都需要5秒,因此连续对4个列表求和将需要20秒。
如果我使用multiprocessing
,我是否可以同时对4个列表求和,并且所有4个求和操作只需要5秒而不是20秒?
发布于 2019-05-15 08:53:28
是的,对于纯CPU工作,它将以线性方式加速。快速示例:
from multiprocessing import Pool
import time
def calc_total(*_):
sum(range(100_000_000))
start_time_1 = time.time()
for _ in range(4):
calc_total()
print(time.time() - start_time_1)
with Pool(processes=4) as p:
start_time_2 = time.time()
p.map(calc_total, range(4))
print(time.time() - start_time_2)
单线程: 4.127秒
多线程: 0.960秒
但是,您在示例中遇到的问题是管理内存中的数组以共享或创建每个线程,否则会有大量开销在进程之间移动数组,从而降低速度。
https://stackoverflow.com/questions/56140143
复制相似问题