【发布时间】:2019-07-16 03:14:32
【问题描述】:
我正在尝试处理多处理,但在我的情况下,多处理似乎最终比串行执行慢。我尝试了下面发布的 sn-p,结果对我来说比较慢。我想使用我拥有的所有处理器来执行。还有一件事,有没有办法提升 for 循环和嵌套 for 循环。
import multiprocessing
import time
def add(a ,b ,c):
d = 0
for i in range(len(a)):
d = a[i] + b + c
return d
a = list()
for i in range(999999):
a.append(i)
b = a[2] + a[9]
c = a[3] + a[8]
#Serial
execTime = time.time()
res = add(a, b, c)
print "Serial: " + str(res) + " Exec Time: " + str(time.time() - execTime)
#Multiprocessing
execTimeMult = time.time()
resSet = [a, b, c]
cpu = multiprocessing.cpu_count()
pool = multiprocessing.Pool(cpu)
res = pool.apply(add, resSet)
print "Multiproc: " + str(res) + " Exec Time: " + str(time.time() - execTimeMult)
结果:
序列号:1000020 执行时间:0.0912199020386
多进程:1000020 执行时间:0.257400989532
【问题讨论】:
-
有多少个核心?即,
cpu的值是多少? -
'cpu' 变量返回 4。
-
这种特殊类型的计算可能会通过矢量化来加速。你有没有想过用 Numpy 解决这个问题?
标签: python python-2.7 python-multiprocessing