多处理可加快python中的执行时间

时间:2019-05-15 00:04:54

标签: python multiprocessing

我有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秒?

1 个答案:

答案 0 :(得分:0)

是的,它将以线性方式加速进行纯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秒

但是,您的示例遇到的问题是管理要在每个线程中共享或创建的内存中的数组,否则在进程之间移动数组会造成很多开销,这会使它变慢。