多处理比正常的单个进程慢

时间:2016-06-24 10:00:11

标签: python multiprocessing bigdata

我是多处理的新手,当我运行这个简单的例子时,我感到很惊讶。

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并同时计算多个值。是几个过程的产生真的很耗时,还是别的什么?还有什么我可以用来加速大型阵列的计算吗?

0 个答案:

没有答案