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

为什么差别这么大呢?这是因为不同平台解析器不同的原因造成的吗?
7916 次点击
所在节点    Python
44 条回复
xdeng
2014-05-07 20:40:52 +08:00
被优化掉了吧
FarBox
2014-05-07 20:45:41 +08:00
但是,你这段代码,跟你的核数,内存大小,都没有直接的关联呀……
Ever
2014-05-07 20:45:50 +08:00
windows下面用time.clock()
glasslion
2014-05-07 20:53:45 +08:00
@FarBox 和内存有关联, range(10000000) 占的内存不小了
min
2014-05-07 20:55:18 +08:00
内存 cpu os 各不相同,硬拉到一起准备做转基因杂交试验么?
stackpop
2014-05-07 20:56:23 +08:00
@glasslion 求解这一句怎么个占内存法
66CCFF
2014-05-07 21:07:25 +08:00
@stackpop 会生成一个(0 - 10000000)的表出来。。。如果不用xrange的话
decken
2014-05-07 21:10:04 +08:00
@Ever 用了 结果是:0.659124743394 seconds
decken
2014-05-07 21:13:19 +08:00
@FarBox 想不明白的是屌丝机居然比高端服务器运行这段程序还快

@min 像戴尔的和普通机配置悬殊,但是差的反而快,这就奇怪了.
cevincheung
2014-05-07 21:19:52 +08:00
所以要升级到python3。 128内存,单核cpu虚拟机0.6s
decken
2014-05-07 21:20:52 +08:00
@cevincheung 3不是出了名的慢吗?
phyng
2014-05-07 21:21:32 +08:00
i3-3110M/8G RAM/SSD/Win 8.1 64bit

Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
~1.5s

Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32
~1.3s

难道因为我是笔记本= =!
测试表明,Python3性能比Python2好15%?
glasslion
2014-05-07 21:21:39 +08:00
@decken 谁告诉你3慢的?
kemad
2014-05-07 21:22:48 +08:00
看这个代码,用不到多少内存,估计是只跑在一个CPU的一个核,那比的就是cpu主频。

服务器的主频确实有可能比普通台式的低。

你用这个代码来跑测试,意义真不大。
phyng
2014-05-07 21:26:25 +08:00
我把笔记本从节能模式改成高性能
Python2 ~0.8s
Python3 ~0.7s
66CCFF
2014-05-07 21:27:57 +08:00
@decken 改用xrange()的话,linux快了很多。
我的结果:python version 2.7.6
i7 3640qm 8g 内存的机器: range() 0.58s xrange 0.41s

linux version 2.7.3
E3 3.3Ghz Ramnode openvz 128m ram range() 0.91s xrange() 0.33s

Unknown Xeon 2.3Ghz DigitalOcean Kvm 2G RAM range() 1.2s xrange() 0.8s
66CCFF
2014-05-07 21:30:51 +08:00
顺带一提我的笔记主频一般睿频是到 3.2Ghz。
看起来最后和cpu主频关系确实很大。
phyng
2014-05-07 21:39:19 +08:00
恰恰相反,主机win8 Python2/3 64bit分别要~0.8s ~0.7s,同一台电脑的虚拟机Ubuntu 64bit只需要~0.6s ~0.5s
lynx
2014-05-07 21:40:07 +08:00
测试代码单线程的,也用不了多少内存
时间的长度跟CPU单核性能有关,其他关系不大
decken
2014-05-07 22:17:56 +08:00
@lynx
@66CCFF
第一部cpu主频为2.4GHz
第二部cpu主频为2.0GHz
第三部cpu主频为3.3GHz

第二部比第一部主频低,购买的年代第二部比第一部早2 3年吧,但是第二部和第一部差别不是很明显

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

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

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

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

© 2021 V2EX