一个Python程序的6次改进 在 http://blog.csdn.net/tinydust 贴出
下面是总结出来的最快的python实现
import datetime
if __name__ == "__main__":
t1=datetime.datetime.today()
f = file("email.txt","r")
f2 = file("email_new.txt","w")
f2.writelines(set(f))
f.close()
f2.close()
t2=datetime.datetime.today()
print str(t2-t1)
在我机器上的测试结果:
python 2.5: 0:00:00.172000
这个程序语言特性用到了极致, 近乎完美地解决了问题,佩服!
一位网友的ruby实现
#!/usr/bin/env ruby
t = Time.new
file = 'email.txt'
f1= File.new('email.txt', 'r')
data = f1.readlines
f1.close
f2 = File.new('email_rb.txt', 'w')
f2.write(data.uniq.join)
f2.close
puts Time.new - t
ruby 2.0.0 (Base: Ruby 1.9.0 2006-04-08) [i386-mswin32]
YARVCore 0.4.1 Rev: 545 (2006-09-01) [opts: [inline method cache] ]
这个程序也很酷,结果 0.391
看了之后,马上产生了用lua写一个同样程序的想法!
lines = {}
f1 = io.open ("email.txt","r")
for line in f1:lines() do lines[line] = true end
f1:close()
f2 = io.open ("e_t.txt","w+")
for line in pairs(lines) do f2:write(line, "\n") end
f2:close()
print(os.clock())
Lua 5.1.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio: 0.406
测试结果: Python:Ruby:Lua = 172:391:406
是不是LUA就差了呢!才不是呢!
这也是可以理解的, LUA io操作肯定是没有优化的,没有一次将所有的数据读入/写出,我尝试一次读入出数据,然后对读入的数据按照string的方式来处理,然后一次写盘,测试的结果是比上面的程序慢了一倍,问题在于lua对于字符串的操作同样也为优化,花的时间很长,CPU/内存开销都很大,看来又比要对字符处处理做一个扩展库.
另外将上面的程序两个循环合并成一个同时操作读入/写出文件后性能也不理想,因为同时在两个文件上进行IO操作,硬盘磁头会频繁移动,性能反而降低。LUA的优势要嵌入C/C++才能表现出来!
不过python的表现让我惊奇, rite的表现也很惹人注意。
由于我的开发工作决定使用lua会更好。所以我会继续使用lua.
iolanguage也进入了我的视线,抽空也的研究一下!
星期三, 十月 04, 2006
订阅:
博文评论 (Atom)
1 条评论:
您好,修改了一下您的lua程序,在测试用30K和60K的文本文件测试后速度是相同的。
f1 = io.open("test.txt", "r")
f2 = io.open("test1.txt", "w")
for line in f1:lines() do
f2:write(line, "\n")
end
f2:close()
f1:close()
print(os.clock())
和您的程序区别就在于没有建立Table。
杨城 gump.yang@gmail.com
发表评论