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

alw*_*btc 5 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], ...]
Run Code Online (Sandbox Code Playgroud)

我可以像这样连续地对内部列表求和:

for list in [a,b,c,d]:
    total = 0
    for [x,y] in list:
        total += x + y
    print("total is: ", total)
Run Code Online (Sandbox Code Playgroud)

假设每个列表的每个求和操作需要5秒钟,因此连续累加4个列表将需要20秒。

如果使用multiprocessing,是否可以同时对4个列表求和,而所有4个求和操作将仅需5秒而不是20秒?

Cas*_*mon 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)
Run Code Online (Sandbox Code Playgroud)

单线程:4.127 秒

多线程:0.960 秒

但是,您的示例会遇到的问题是管理内存中要为每个线程共享或创建的数组,否则在进程之间移动数组会产生大量开销,从而降低速度。