该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-04
wosmvp 写道 xukong 写道 没事,你只处理30万,50万的数据量也行的(再少就比较不出了,起码10万数据PYTHON都是0秒,RUBY是18秒左右,我也晕了,怎么10万数据差别还更大,原来我可还真没有比较只处理10万的量),也够常用的数量级了,结果就是保存格式化后,符合附件规范的文本文件啊
你起码要提供数据呀? wosmvp 兄, 搞的怎么样了, 我看好你的50倍提升呀。不要让我们久等呀。 |
|
返回顶楼 | |
发表时间:2009-05-04
最后修改:2009-05-04
楼上,我要要工作的唉……
------------ 08100000085150000001 00 13980000001 13030000001 0 DELI 0 140 085101 15 108511 13800851500 20080810000000 20080810000000 以这行为例,他们的数据是从那里取的? 所有的数据只有三列,除第1个值不同,(它是怎样得来的?),还有电话号码顺序不同(GMO/GMT),其它完全相同? 也就是说我要写这个程序,只需要判断wait-status.csv里面的数据,如果第一个值为3,取出电话号码,加上上面的固定值保存到 GMO 文件中,如果第一个值为4,取出电话号码,加上上面的固定值保存保存到GMT中? --------------- OK,第一个值是时间加增加值,第二个是半固定值,第三、四为电话号码,第五为固定值,第六为发送成功? 第七为取出值 第八为固定值 第九为固定值 第十根据第二个来取 第十一为固定值 第十二与第十三相同为时间 |
|
返回顶楼 | |
发表时间:2009-05-04
最后修改:2009-05-04
你只生成个2行的测试数据然后比较结果文件看下就知道了啊,90%的数据都是固定的...就是截取时间那繁琐了点
靠,都没注意到python的format_data中的split还调用了2次,写重了(To whosmvp:Like第84行: 我去掉了这行,程序可也没见有几倍的提升),不过RUBY可是没有写重的,呵 |
|
返回顶楼 | |
发表时间:2009-05-04
搬个小板凳吧,这年头,不怕叫板,就怕较真。
|
|
返回顶楼 | |
发表时间:2009-05-04
没啥好比的,这段应用用ANSI C写速度能提高到8秒以内,你信不?
|
|
返回顶楼 | |
发表时间:2009-05-04
呵,现在的话都说得...,我相信没有最快只有更快,但是你好歹起码给个软硬件环境,给个处理数据量啊这些再说噻...
我曾经用C++写过,但是因为时间紧,C++里面又没有现成的SPLIT(或者我不知道,C++我写得少),写了个初步的就没时间再整下去了,那个的可优化就更大了,我也就不拿出来现丑了... |
|
返回顶楼 | |
发表时间:2009-05-04
貌似Google现在资助了一个CPython改进项目,声称要把Python再提速5倍:
http://code.google.com/p/unladen-swallow/wiki/ProjectPlan |
|
返回顶楼 | |
发表时间:2009-05-04
[code=ruby]
status_file = File.open('status.csv') wait_file = File.open('wait-status.csv') @status = {} gmo_result = File.new('GMO','w') gmt_result = File.new('GMT','w') send_num = '00000000' receive_num = '00000000' status_file.map do |x| a = x.split(',',2) @status[a[0]] = a[1][0,4] end wait_file.map do |x| time = (x[64,2] + x[67,2] + x[69,2] + x[72,2]+ x[75,2]).gsub(/\D/,'0') if x[0].chr == '3' gmo_result << "#{time}08515#{send_num.succ!} 00 #{x[22,11]} #{x[34,11]} 0 #{@status[x[2,19]]} 0 #{x[56,3]} 085101 15 108511 13800851500 2008#{time} 2008#{time} \n" else gmt_result << "#{time}08515#{receive_num.succ!} 00 #{x[22,11]} #{x[34,11]} 0 #{@status[x[-12,10]]} 0 #{x[56,3]} 085101 \t 108511 13800851500 2008#{time} 2008#{time} \n" end end gmo_result.close gmt_result.close 先上个版本,您先比较比较速度? |
|
返回顶楼 | |
发表时间:2009-05-04
wosmvp 写道 [code=ruby]
status_file = File.open('status.csv') wait_file = File.open('wait-status.csv') @status = {} gmo_result = File.new('GMO','w') gmt_result = File.new('GMT','w') send_num = '00000000' receive_num = '00000000' status_file.map do |x| a = x.split(',',2) @status[a[0]] = a[1][0,4] end wait_file.map do |x| time = (x[64,2] + x[67,2] + x[69,2] + x[72,2]+ x[75,2]).gsub(/\D/,'0') if x[0].chr == '3' gmo_result << "#{time}08515#{send_num.succ!} 00 #{x[22,11]} #{x[34,11]} 0 #{@status[x[2,19]]} 0 #{x[56,3]} 085101 15 108511 13800851500 2008#{time} 2008#{time} \n" else gmt_result << "#{time}08515#{receive_num.succ!} 00 #{x[22,11]} #{x[34,11]} 0 #{@status[x[-12,10]]} 0 #{x[56,3]} 085101 \t 108511 13800851500 2008#{time} 2008#{time} \n" end end gmo_result.close gmt_result.close 先上个版本,您先比较比较速度? 这的确是ruby代码,,lz那如果不标明是ruby还真认不出来。。。 |
|
返回顶楼 | |
发表时间:2009-05-04
已经有权威的测试数据说明python 是所有动态语言中最快的..
现在django已经成熟了.作为快速web开发是一个不错的选择.. ------------------------------- 程序员代码管理 http://mysharecode.appspot.com/ gwt中使用flash http://code.google.com/p/gwt-flash-bridge/ |
|
返回顶楼 | |