【发布时间】:2014-11-10 07:45:50
【问题描述】:
我正在尝试分析 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 中运行它。
【问题讨论】:
-
您谈论多线程,但您根本不使用线程。我并不是说多处理不好(通常很好!),但您的术语令人困惑。
-
您有能够处理的 CPU 吗?如果没有,那么就会发生一种模拟多线程。不确定这是否是造成这种情况的原因,但我认为可能
-
你知道多处理不等于多线程。我想这表现更差的原因(在这种情况下)是你的进程没有做太多,但是在设置进程、与它们通信等方面有很多开销。
-
我不介意使用线程而不是进程,但我仍然想要一个“映射”函数/希望能够从线程中检索返回值。当我在寻找一种方法时,我被引导到多处理模块。
-
我认为如果你使用多线程,性能可能会更差——因为你的多线程函数太小了。
标签: python multithreading