zoukankan      html  css  js  c++  java
  • 日志处理时,遇到多种re表达式轮循匹配的高性能处理方式

    一般的处理方式,是建立一个正则表达式列表,依次尝试匹配,成功则返回,这种方式往往会遇到性能问题

     

    1. 同样的样本数据, 用传统的newlogp方式仅做re部分,用hp做先定位后匹配,后者有明显的优势

    ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python normaltest.py

    11547.538814992658

     

    real 1m27.067s

    user 1m26.248s

    sys 0m0.212s

    说明:上面是用python3跑的一般正则匹配100万条

    ubuntu@VM-0-13-ubuntu:~/highperf_re$ time /home/ubuntu/pypy3/bin/pypy3 normaltest.py

    22142.39115540099

     

    real 0m51.722s

    user 0m46.440s

    sys 0m0.500s

    说明:用pypy3跑的结果,几乎快一倍

    ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python hptest.py

    379582.7860370719

     

    real 0m4.326s

    user 0m3.564s

    sys 0m0.188s

    说明:用hyperscan仅做模式识别(判断使用哪个RE)速度惊人

    ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python newtest.py

    282825.5283797949

     

    real 0m4.742s

    user 0m4.540s

    sys 0m0.156s

    说明: 用hs后,在on_match函数中写re匹配,也没有慢太多,并且,RE表达式越多,hs的方式应该优势越明显

  • 相关阅读:
    网络编程
    反射函数与元类
    面向对象进阶
    对象的封装与接口
    对象继承
    面向对象
    包,logging模块与haslib模块
    闭包函数及装饰器
    函数对象、函数的嵌套、名称空间及作用域
    函数简介及函数参数介绍
  • 原文地址:https://www.cnblogs.com/yeyong/p/12879794.html
Copyright © 2011-2022 走看看