多线程运行比单线程慢?

时间:2014-11-10 07:45:51

标签: python multithreading

我正在尝试在Python中分析一个基本函数,以查看多线程的评估结果的比较优势。随着应用函数的数据大小的增加,线程版本似乎越来越差。启动线程的开销是否在这里我没有考虑到?有人可以解释如何实际实现多线程优化/我做错了吗?

from multiprocessing import Pool

def f(x):
    return x*x

pool = Pool(processes=4)

import timeit
print timeit.timeit('map(f, range(20000000))', setup = "from __main__ import f", number = 1)
print timeit.timeit('pool.map(f, range(20000000))', setup = "from __main__ import f, pool", number = 1)

结果:

5.90005707741
11.8840620518
[Finished in 18.9s]

如果相关,我在Sublime Text 3中运行了这个。

2 个答案:

答案 0 :(得分:1)

"工作单位"你在每份工作中做得太小了。当你" map"这通常是一个问题。像这样的工作 - 映射过程的开销占主导地位。当然,将作业映射到单独的进程比在同一进程中映射更耗时,因此多进程解决方案速度较慢也就不足为奇了。

尝试使用可以进行更多计算的函数,您将看到多处理的好处。

答案 1 :(得分:0)

@john已经给出了答案,但我想提供一个例子

from multiprocessing import Pool

def f(n):#fibonacci
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return f(n-1) + f(n-2)

pool = Pool(processes=4)

import timeit

print timeit.timeit('map(f, xrange(35))', setup = "from __main__ import f", number = 1)
print timeit.timeit('pool.map(f, xrange(35))', setup = "from __main__ import f, pool", number = 1)

结果:

4.349
2.497