我有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?
是的,它将以线性方式加速纯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秒
但是,您在示例中遇到的问题是管理每个线程中要共享或创建的内存中的数组,否则在过程之间将有很多开销移动阵列可以减慢其速度。