我决定学习如何在Python中实现多线程,并做了一个比较,看看在双核CPU上我能获得什么样的性能增益。我发现我的简单多线程代码实际运行速度比顺序代码慢,我不明白为什么。
我设计的测试是生成一个大的随机数列表,然后打印最大值
from random import random
import threading
def ox():
print max([random() for x in xrange(20000000)])
在我的英特尔酷睿2双核上,ox()
大约需要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()
这样的东西吗?
目前没有回答
相关问题 更多 >
编程相关推荐