【发布时间】:2010-06-25 20:07:15
【问题描述】:
我决定学习如何在 Python 中完成多线程,我做了一个比较,看看在双核 CPU 上我会获得什么样的性能提升。我发现我的简单多线程代码实际上比顺序等效代码运行得慢,我不知道为什么。
我设计的测试是生成一个大的随机数列表,然后打印最大值
from random import random
import threading
def ox():
print max([random() for x in xrange(20000000)])
ox() 在我的 Intel Core 2 Duo 上完成大约需要 6 秒,而 ox();ox() 大约需要 12 秒。
然后我尝试从两个线程调用 ox() 以查看完成的速度。
def go():
r = threading.Thread(target=ox)
r.start()
ox()
go() 大约需要 18 秒才能完成,两个结果在 1 秒内打印。为什么要慢一点?
我怀疑 ox() 正在自动并行化,因为如果查看 Windows 任务管理器性能选项卡,并在我的 python 控制台中调用 ox(),两个处理器的利用率都会跳到大约 75% 直到它完成。 Python 会在可能的情况下自动并行化 max() 之类的东西吗?
【问题讨论】:
标签: python multithreading parallel-processing