我是多处理的新手,当我运行这个简单的例子时,我感到很惊讶。
from multiprocessing import Pool
import numpy as np
import timeit
data = np.linspace(1,100, num=1000000)
def f(x):
return x*x
start = timeit.default_timer()
if __name__ == '__main__':
p = Pool(2)
multi = p.map(f, data)
stop = timeit.default_timer()
print ("Multi: " + str(stop-start))
Nonmulti = np.zeros(len(data))
start = timeit.default_timer()
for i in data:
Nonmulti[i-1] = f(i)
stop = timeit.default_timer()
print ("Non multi: " + str(stop-start))
我得到以下数字,包含不同的进程数,并查看任务管理器:
Multi:
Pool Time CPU_max
2 ~39 ~30%
4 ~42 ~30%
8 ~39 Sligthly over 30%
Non multi:
Time CPU_max
14.5 11%
所以我觉得,多处理比for-loop更快,因为池能够使用更多的CPU并同时计算多个值。是几个过程的产生真的很耗时,还是别的什么?还有什么我可以用来加速大型阵列的计算吗?