Contents
Py vs Perl 运行
{{{俊杰蔡 <[email protected]> reply-to [email protected], to [email protected], date Thu, Apr 3, 2008 at 5:50 PM subject [CPyUG:45860] }}} 一段python程序的效率问题
- 从以下对比得出
- (a)random.random()函数比random.randrange()函数快。
- (b)xrange不一定比range快。
- (c)使用StringIO缓存全部内容,一下子写也不一定快。
- (d)write() 块写效率会提高。
- (e)print 到文件句柄 写效率也不错高
- (f)脚本越短,引用的模块越少效率好
ZoomQuiet 测试环境:
- HP 520 笔记本电脑 (GQ349AA)
- 英特尔® 酷睿™ 双核处理器 T2300E 1.66GHz , 2MB 二级高速缓存, 667MHz FSB
- 内存 2Gb
time vs 0.1
5" random.pl
use strict; open (WW,"> 500000") or die "$!"; foreach(1..5000000){ my $i = int(rand 10000000) % 3; print WW $i."\n"; } close WW;
31" random.py
time vs 0.2
48" random0.2.py
1 import cStringIO as StringIO
2
3 import random
4 import time
5
6 __revision__ = '0.2'
7
8 def test():
9 fh = open("test_cjj0.2","w")
10 output = StringIO.StringIO()
11
12 for i in xrange(5000000):
13
14 data = random.randrange(1000000,9999999,1)
15 yu = data % 3
16 print >>output, yu
17
18 fh.write(output.getvalue())
19
20 fh.close()
21
22 if __name__ == "__main__" :
23 test()
time vs 0.3
33" random0.3.py
time vs 0.4
27" random0.4.py
time vs 0.5
51" random0.5.py
time vs 0.6
26" random0.6.py
time vs 0.7
10" random0.7.py
time vs 0.8
5" random0.8.py
time vs 0.9
- 使用 pysco 前后的差异
15~11" random0.9.py
1 from random import random
2 __revision__ = '0.9'
3
4 def test():
5 five_million = 5000000
6 fh = open("test_cjj0.9","w")
7 for i in xrange(five_million):
8 data = int(random()*(9999999))
9 yu = data % 3
10 fh.write('%d\n' % yu)
11 fh.close()
12
13 if __name__ == "__main__" :
14 try:
15 import psyco
16 psyco.full()
17 except ImportError:
18 pass
19 test()
time vs 1.0
- 是否打开 pysco 的对比
- 使用迭代后,进行 pysco 加速反而无益
9~10" random1.0.py
__revision__ = '1.0' def gen_yu(): for i in xrange(5000000): data = int(random()*(9999999)) yu = data % 3 yield yu def test(): fh = open("test_cjj1.0","w") content = '\n'.join([str(m) for m in gen_yu()]) fh.write(content) fh.close() if __name__ == "__main__" : #''' try: import psyco psyco.full() except ImportError: pass #''' test()
time vs end
{{{俊杰蔡 <[email protected]> reply-to [email protected], to [email protected], date Sat, Apr 5, 2008 at 2:03 AM subject [CPyUG:45963] Re: 一段python程序的效率问题 }}} Python 脚本胶水威力!
1" a.py
cjj.c:
#include <stdio.h> void amaze() { FILE *fp; int i,num; fp = fopen("test_cjj","w"); for(i=0;i<5000000;i++) { num = (rand()%9000000+1000000) % 3; fprintf(fp,"%d\n",num); } fclose(fp); }
cjj.i:
%module cjj %{ extern void amaze(); %} extern void amaze();
编译
swig -python cjj.i \ gcc -c cjj.c cjj_wrap.c -I/usr/include/python2.5 \ ld -shared cjj.o cjj_wrap.o -o _cjj.so
a.py:
运行
$time ./a.py real 0m1.271s user 0m1.228s sys 0m0.036s
反馈
创建 by -- ZoomQuiet [2008-04-03 13:26:48]