为什么 python joblib 并行处理比单个 CPU 慢?



我试图理解为什么使用 joblib 的并行处理比单个 CPU 操作慢? 下面是我的代码。

from joblib import Parallel, delayed
import multiprocessing
import time
inputs = range(10000)
def processInput(i):
return i * i
if __name__ == '__main__':
num_cores = multiprocessing.cpu_count()
start_time = time.process_time()
results = Parallel(n_jobs=num_cores)(delayed(processInput)(i) for i in inputs)
#print(results)
print(str(time.process_time() - start_time))
results=[]
start_time = time.process_time()
for i in inputs:
results.append(processInput(i))
#print(results)
print(str(time.process_time() - start_time))

输出:

Time taken parallel: 2.4427331139999997
Time taken single cpu: 0.00196953699999991

生成进程引入的开销远高于计算时间。实际上,在这种情况下使用多处理没有任何好处。

如果你改变你的功能,你将开始观察到改进。

例如,让我们用朴素递归斐波那契函数更改当前函数。

inputs = range(25, 35)
def processInput(n):
if n < 2:
return n
return processInput(n-2) + processInput(n-1)

Time taken parallel: 0.06956500000000002
Time taken single cpu: 8.295273

最新更新