Python线程意外地

2024-06-07 11:59:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我决定学习如何在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()这样的东西吗?


Tags: 代码importgo列表顺序def增益random

热门问题