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

我编写了以下代码,以在我的计算机上测试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.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)