Python多处理速度
我编写了以下代码,以在我的计算机上测试Python的多处理功能:Python多处理速度,python,multiprocessing,Python,Multiprocessing,我编写了以下代码,以在我的计算机上测试Python的多处理功能: from multiprocessing import Pool var = range(5000000) def test_func(i): return i+1 if __name__ == '__main__': p = Pool() var = p.map(test_func, var) 我使用Unix的time命令对此进行计时,结果如下: real 0m2.914s user 0m4.705
from multiprocessing import Pool
var = range(5000000)
def test_func(i):
return i+1
if __name__ == '__main__':
p = Pool()
var = p.map(test_func, var)
我使用Unix的time命令对此进行计时,结果如下:
real 0m2.914s
user 0m4.705s
sys 0m1.406s
然后,使用相同的var
和test_func()
I计时:
var = map(test_func, var)
结果是
real 0m1.785s
user 0m1.548s
sys 0m0.214s
多处理代码不应该比普通的老map
快得多吗?为什么应该
在map函数中,您只需按顺序调用该函数
多处理池创建一组工作线程,任务将映射到这些工作线程。
它正在协调多个工作进程以运行这些功能
尝试在函数内部做一些重要的工作,然后计时,看看多处理是否有助于加快计算速度
您必须了解,使用多处理会带来开销。只有当计算工作量远远大于这些开销时,您才会看到它的好处
请参见Hellmann的优秀介绍中的最后一个示例:
根据您拥有的核心创建池 使用并行化会带来开销。只有当每个工作单元花费足够长的时间来补偿开销时,才有好处 此外,如果您的机器上只有一个CPU(或CPU线程),那么使用并行化就毫无意义。只有当您至少有一台超线程机器或至少两个CPU内核时,您才会看到收益 在您的情况下,简单的加法操作并不能补偿这一开销 尝试一些更昂贵的东西,例如:
from multiprocessing import Pool
import math
def test_func(i):
j = 0
for x in xrange(1000000):
j += math.atan2(i, i)
return j
if __name__ == '__main__':
var = range(500)
p = Pool()
var = p.map(test_func, var)
from multiprocessing import Pool
import math
def test_func(i):
j = 0
for x in xrange(1000000):
j += math.atan2(i, i)
return j
if __name__ == '__main__':
var = range(500)
p = Pool()
var = p.map(test_func, var)