Win 与 Linux 下 python 效率问题

2014-05-07 20:36:22 +08:00
 decken
import time

t1 = time.time()
for i in range(10000000):
框框pass
t2 = time.time()
print ("process %s seconds" %(t2 - t1))

这段代码很简单,就是空循环一千万次

在3部不同机器运行,都是python2.7
戴尔服务器,64G内存,8核CPU,操作系统:debian 64bit(挺牛逼的)
运行时间:1.09349584579 seconds

联想服务器,4G内存,双核CPU,操作系统:ubuntu12.04 64bit
运行时间:1.10862994194 seconds

普通PC机,2G内存,I3CPU,操作系统:Win7 64(很屌丝了吧)
运行时间:0.648999929428 seconds

为什么差别这么大呢?这是因为不同平台解析器不同的原因造成的吗?
7789 次点击
所在节点    Python
44 条回复
Ever
2014-05-08 13:42:49 +08:00
@decken 3.3G的I3是2、3代的吧, 那单颗性能差不多是E5335单颗的一倍多, 尤其你这个例子跑在单核上性能差距更大.
decken
2014-05-08 19:43:21 +08:00
@Ever 确实是2代的I3
darklowly
2014-05-09 05:28:49 +08:00
这水平,只能写一辈子python了。
jeeyong
2016-12-04 23:44:14 +08:00
我觉得是主频的问题吧?
另外,如果空循环,其实只是建立了一个很大的列表吧。。
在内存都足够大的情况下,谁建立的更快
就是主频的问题了吧,与核心数没关系。
然后再分析结果的话。
第一台机器,主频快,但是比第二台的结果快的并不明显,我觉得主要问题在于他的内存时 64gb , 在创建列表的时候,内训寻址时间上消耗了一部分。
第三台机器的主频最高,架构差异并没有那么大
而这段代码影响性能的就是 cpu 的主频。
所以第三台机器理所应当的最快
其次第一,然后第二台
一个猜想,如果把第一台机器的内存缩小到 4gb 的话。可能会再快一点。执行结果
以上为第一种猜想
第二种有点扯,但不排除
楼主用的是 time.time().....严格来说这个不准确。
如果某台机器有更多的后台应用占用 cpu 。。。这个结果就没有太大的参考价值了
改用 time.clock()

我常用的测试性能的方法。
s = time.clock()
i = 100000000
while i > 0:
i -= 1
print s - time.clock()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/111536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX