为什么生成一个进程会使计算速度提高一倍?



下面的计算在我的Precision 5520上大约需要10.4秒:

import time
before = time.time()
sum = 0
for i in range(1, 100000000):
sum += i
print(time.time() - before, sum)

在同一台笔记本电脑上,以下操作只需要5.2秒:

import multiprocessing as mp
import time
def foo():
before = time.time()
sum = 0
for i in range(1, 100000000):
sum += i
print(time.time() - before, sum)
mp.Process(target=foo).start()

这个结果是一致的。事实上,即使我同时运行cpu_count进程,它也保持不变(加速因子略小)。

那么,为什么生成一个进程会使计算速度提高一倍呢?

使计算速度快的不是过程,而是在函数中运行计算。这是因为全局变量访问比使用CPython解释器访问局部变量要慢。. 如果在相同的进程中简单地运行foo(),那么计算时间也会降低两倍。下面是一个例子:

import time
def foo():
before = time.time()
sum = 0
for i in range(1, 100000000):
sum += i
print(time.time() - before, sum)
# Slow (8.806 seconds)
before = time.time()
sum = 0
for i in range(1, 100000000):
sum += i
print(time.time() - before, sum)
# Fast (4.362 seconds)
foo()

注意覆盖内置函数sum有点危险,因为它可能会破坏使用它的代码并导致奇怪的错误。

最新更新