免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cobrawgl
打印 上一主题 下一主题

求救!怎么样让 perl 在发生异常时不 die [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2012-05-17 07:37 |只看该作者
ttcn_cu 发表于 2012-05-16 23:46
fork一群儿子出来干活,爹活着就行了


这样不好。等于是没解决问题,而且多耗费资源还效率低。

XML在格式稍有错误或是xpath格式错误的时候解析模块多会报错,我用XML::LibXML很久了,也发生过类似事情,eval都能解决。

XML::LibXML这个模块很有名,作者是以色列人,这个模块是C写的,封装了libxml2。libxml2目前是最快的XML解析库,这个模块也是Perl效率最高的解析XML的模块,perlmonks上很多评测。

论坛徽章:
0
12 [报告]
发表于 2012-05-17 09:54 |只看该作者
本帖最后由 hitsubunnu 于 2012-05-17 09:54 编辑

XML::LibXML 只是传说很快 好多人做过测试结果都很意外

我这儿的环境
  SFlinux 6.1 2.6.32-131.21.1.el6.x86_64
  Perl, v5.10.1 (*) built for x86_64-linux-thread-multi


  1. Benchmark: timing 1000 iterations of XML::LibXML::SAX, XML::LibXML::SAX::Parser, XML::Parser...
  2. XML::LibXML::SAX:  4 wallclock secs ( 3.74 usr +  0.01 sys =  3.75 CPU) @ 266.67/s (n=1000)
  3. XML::LibXML::SAX::Parser:  5 wallclock secs ( 5.26 usr +  0.00 sys =  5.26 CPU) @ 190.11/s (n=1000)
  4. XML::Parser:  2 wallclock secs ( 2.10 usr +  0.00 sys =  2.10 CPU) @ 476.19/s (n=1000)

复制代码
其实 XML::SAX::ExpatXS 比 XML :: Parser :: Expat还要快点儿

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
13 [报告]
发表于 2012-05-17 12:20 |只看该作者
回复 11# py


    不理解为什么多进程在多核处理器上效率会低。有什么依据么?

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
14 [报告]
发表于 2012-05-17 13:45 |只看该作者
py 发表于 2012-05-17 07:37
这样不好。等于是没解决问题,而且多耗费资源还效率低。

XML在格式稍有错误或是xpath格式错误的时候 ...


我怎么听说有很多库比libxml2速度快,比如rapidxml,之前在网上也看过人家的测试,难道是假的。我自己是没测试。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2012-05-17 16:17 |只看该作者
hitsubunnu 发表于 2012-05-17 09:54
XML::LibXML 只是传说很快 好多人做过测试结果都很意外

我这儿的环境

这个是我没说的很严谨。XML::LibXML快,主要还是快在DOM方式,SAX的确没有XML::SAX::ExpatXS快。这个我看到过之前的测试:
http://www.perlmonks.org/?node_id=760629

实际上我非常希望看到有比XML::LibXML效率更高的模块出现,因为这样就能彻底解决我现在工作上的问题。我们这里每7秒产生快100MB的XML日志,而且没法变成XML流的形式从SAX上获取更高效率。比较之后XML::LibXML是最快的。我当时是读入XML并做多次XPATH取值得到的结果。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2012-05-17 16:19 |只看该作者
回复 13# ttcn_cu

不是说多进程效率低,而是说楼主的问题本身是XML解析的问题,解析的过程出错可能有很多原因,但无论是什么原因eval不能跳过应该是发生了严重错误导致。这很可能是xml的解析库或是Perl的模块的问题。这个时候用个多进程解决不就成掩耳盗铃了吗

提高解析XML速度的问题,一个是通过改变底层的解析库,一个是通过转换方法,比如使用SAX不读入整个文件。

即使用多进程/多线程也不能是为了跳过eval的错误。
   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2012-05-17 16:20 |只看该作者
ecjtubaowp 发表于 2012-05-17 13:45
我怎么听说有很多库比libxml2速度快,比如rapidxml,之前在网上也看过人家的测试,难道是假的。我自己是 ...

rapidxml的确没听说过,搜了一下,没看见测试不过的确有人在说比libxml2快很多倍。这个rapidxml没流行起来可能是因为它只支持DOM不支持SAX的原因

没有找到cpan上有对应的Perl模块,不过如果真的这么快,我倒是愿意简单包装一下这个发个Perl模块。DOM模式已经满足我的需求了

论坛徽章:
0
18 [报告]
发表于 2012-05-17 17:29 |只看该作者
Dom模式是要将100M xml读入内存的

你们服务器真的很强悍

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2012-05-17 17:46 |只看该作者
回复 18# hitsubunnu

现在的日志很多都是XML存储的。和你想的不同,这100兆不是一个完整的XML文件,如果是一个100兆的XML文件那肯定用SAX方式流读取了

这些日志是带有时间戳的,其实就是SYSLOG-NG的LOG部分用的XML。SAX方式更适合读取一个很大的XML文件或是XML流,大部分情况还是DOM的天下
   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2012-05-18 09:16 |只看该作者
ecjtubaowp 发表于 2012-05-17 13:45
我怎么听说有很多库比libxml2速度快,比如rapidxml,之前在网上也看过人家的测试,难道是假的。我自己是 ...


详细了解了一下,包括rapidxml在内,还有几个类似的DOM方式的XML库的确都比libxml2快,但代价是不支持xpath,而且有的库甚至不能修改XML。

不支持xpath可太不方便了,看来对Perl来说XML::LibXML还是首选了。而且这个libxml2也是苹果的ios默认支持的xml读取库
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP