论坛首页 编程语言技术论坛

从实际工作需要与经历说说我选择PYTHON的原因(附相关源代码)

浏览 39916 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-05-05   最后修改:2009-05-05
呵,你还在花时间改进啊...

我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊

使用PYTHON我花了20%的时间解决了80%的性能问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了

0 请登录后投票
   发表时间:2009-05-05  
xiaolin0105 写道
学过一阵python。

看完整本dive into python还是不知所以然,感觉这个语言有够奇怪,和OZ有的一拼,就是一个为了别人有xx所以我也要有xx的大杂烩。

事实证明,不碰python是对的,python也火不了,google再怎么忽悠也无济于事,所以现在app engine只能灰溜溜的回头支持java了。

python不是未来,大家不要在这个上面浪费时间了。


你这就是典型的吃不到葡萄说葡萄酸.
事实是: python 在所有计算机语言中排名第6位的,甚至比背后有巨大力量支持的c# 还要高,这足以说明它受欢迎的程度.
0 请登录后投票
   发表时间:2009-05-05  
xukong 写道
呵,你还在花时间改进啊...

我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊

使用PYTHON我花了20%的时间解决了80%的问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了



冏,发现Windows的Ruby性能不是一般的差!!!
50万在我这为 17s
100万为 40s

PS:我的电脑比x60可差不少不少……
0 请登录后投票
   发表时间:2009-05-05  
PS:
我可以在增加五行左右代码的情况下,让代码变的简单易懂
再PS:
那里的数据处理的不正确?
0 请登录后投票
   发表时间:2009-05-05  
呵,就是我前面说了的嘛,听说RUBY在LINUX下性能比较好...

我工作上没有LINUX环境,PY在LINUX下性能怎样?和WIN差不多还是有增加减少?
0 请登录后投票
   发表时间:2009-05-05   最后修改:2009-05-05
哦,那就好,那大家就更可以根据需要选择了

我没有细看,不过你产生的结果和我产生的结果不一样,好象少了几个字符?你比较下我产生的文件就看到了

顺便说一下,你现在的处理顺序会多些数据: 你把每行等待状态报告匹配的行都输出了,实际应该从状态报告文件来与等待状态报告的文件比较,有状态报告的就输出到GMO,GMT文件,没有的应该输出到过期文件GMA,你现在的输出包含了过期记录了,当然,这在现在的性能改进代中码是枝节问题,但是实际代码要考虑各个情况的,不是一味写文件,呵...
0 请登录后投票
   发表时间:2009-05-05  
冏,我怎么知道分三种情况…… 以为只有发送成功,未发送成功之说……不过这改动起来也很方便的
---------
Py在我电脑10万数据是3秒多,和Ru是差不多的
100万的时候,是35秒,比Ruby的快7秒左右
--------
上个易读性版本,闪,工作
[code='ruby']
status_file   = File.open('status.csv')
wait_file     = File.open('wait-status.csv')
@status       = {}
send_num      = '00000000'
receive_num   = '00000000'
send_data     = []
receive_data  = []

status_file.map do |x|
  @status[$1] = 'UNDELI' if x !~ /^(\d+),DELI/
end
def format(opt={})
  "#{opt[:time]}08515#{opt[:inc_value]}     #{opt[:type]}      #{opt[:phone1]}     #{opt[:phone2]}     0       #{@status[opt[:key]] || 'DELI'}     0   #{opt[:type1]}      085101   #{opt[:type2]}      108511      13800851500     2008#{opt[:time]}     2008#{opt[:time]}\n"
end

wait_file.map do |x|
  time = x[64,2].sub(/^-/,'0') + x[67,2] + x[69,2].sub(/^ /,'0') + x[72,2]+ x[75,2]
  if x[0].chr == '3'
    send_data   << format(:time => time,:inc_value => send_num.succ!,:phone1 => x[22,11], :phone2 => x[34,11],:key => x[2,19],:type => '00',:type1 => x[56,3],:type2 => '15')
  else
    receive_data << format(:time => time,:inc_value => receive_num.succ!,:phone1 => x[22,11], :phone2 => x[34,11],:key => x[-12,10],:type => '01',:type1 => x[56,3],:type2 => "\t")
  end
end

File.open('GMO','w') { |x| x << send_data    }
File.open('GMT','w') { |x| x << receive_data }

0 请登录后投票
   发表时间:2009-05-05  
xukong 写道
呵,你还在花时间改进啊...

我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊

使用PYTHON我花了20%的时间解决了80%的性能问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了


可读性是指给学过ruby的人读的,代码可读性也不是像你那样这么简单的脚本写了230多行,弄那么多不知所云的变量。还有这样的代码:
if ((ic != nil) && (ic > 0))

if (result_search == nil)

虽然您号称写了10年程序,但是单从你写的那ruby代码来看你和我一样属于对ruby还没入门级别的。
至于你喜欢用python这个是你的自由,谁也管不到。可是拿这样水准的ruby代码来说明你选择python的原因未免是在忽悠别人也是忽悠自己。
0 请登录后投票
   发表时间:2009-05-05  
xukong 写道
哦,那就好,那大家就更可以根据需要选择了

我没有细看,不过你产生的结果和我产生的结果不一样,好象少了几个字符?你比较下我产生的文件就看到了

顺便说一下,你现在的处理顺序会多些数据: 你把每行等待状态报告匹配的行都输出了,实际应该从状态报告文件来与等待状态报告的文件比较,有状态报告的就输出到GMO,GMT文件,没有的应该输出到过期文件GMA,你现在的输出包含了过期记录了,当然,这在现在的性能改进代中码是枝节问题,但是实际代码要考虑各个情况的,不是一味写文件,呵...


wosmvp同学只是让你看看ruby代码不是你那样写的,你这些细枝末节问题只要你把需求说清楚了当然谁都会处理的,也不是什么困难的事。
0 请登录后投票
   发表时间:2009-05-05  
哦,失误,失误...

那我就尽量说明下,实际当中状态报告有好几种,DELIVRD,UNDELIVRD,EXPIRED,REJECT,都是只取前4位,这里是测试数据嘛,就只写了2种,成功和不成功,还有就是没有返回状态报告,也就是过期了(2天之内不返回)

另外看了改进后的RUBY,有点小寒,不是对RUBY有点了解的,有些符号操作就看不懂了,当然不懂就不乱用,也不要乱发表评论,这个我是吸取教训了(不过我也只是常规写法啊,谁想到会有这么大差距,关键是2个代码都几乎一样,结果不一样,就有点被迷惑,想当然了),不过要吸引同事,初期还是: 嘿,我这个程序跑得还比较快,也不太难看懂,有兴趣学下没有,呵,呵...
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics