python脚本解析日志文件入库一般有三个重要的步骤:读文件、解析文件、入库。在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发)

1 读文件:一次读一行,磁盘IO太多,效率低下;一次性读如全部文件内容,可能内存不够。采取一个折中的办法,每次读若干byte(具体大小视实际情况而定)。

经过测试,得到结论,在我们写代码的时候应该这样写

f = open(path,'r')

for line in f :

.............

这是系统提供的一种读文件的方法,一般比我们自己每次读若干byte要快(f.read(20000)),具体怎么做到的,现在还不清楚。总之,系统提供的,

应该差不了,不然也太丢人。啊哈!

2 解析日志,如果用到正则表达式,应该先编译然后再查找,这样可以提高速度。例如 :

regex0 = re.compile("(^|;)mobile=(\d+)")

mobile_number=regex0.search(self.resp_log).group(2)

当然,这是一个大方面,精细的方面我们还要在正则的写法上下功夫。关于Python的正则的高效写法,后续会专门用一边文章来写。

3 入库:网上有好多建议使用executemany()这个写法,insert into tablename(xx,xx) values(yy,yy),(yy,yy)....的形式却会快很多,

我们应 该直接把我们的SQL拼接成这种形式,效率远远高于executemany(),具体一次性要插入多少行,自己测一下哦。每秒1W应该没问题。

==============================================================================

按照上面的写法,可以保证读文件、解析文件、入库每个环节都做到最优,但是在整体结构上还有优化的空间,详细如下:

1  启一个线程readThread只负责读文件,然后把读到的内容放到队列Queue1中;

2  启一个线程manageThread只负责解析文件内容,然后把解析好的东西放到Queue2中;

3  启动第三个线程writeDB负责将解析好的文件内容入库;

4 开启一个后台线程对1、2、3三个线程的运行状况进行监控、记录与处理。

python高效解析日志入库的更多相关文章

  1. 一、基于hadoop的nginx访问日志分析---解析日志篇

    前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...

  2. python之配置日志的三种方式

    以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文件,然后使用fileCo ...

  3. Python之配置日志的几种方式(logging模块)

    原文:https://blog.csdn.net/WZ18810463869/article/details/81147167 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Py ...

  4. 【转】python之配置日志的几种方式

    [转]python之配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用 ...

  5. python之配置日志的几种方式

    作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文 ...

  6. 《Python高效开发实战》实战演练——建立应用2

    为了在项目中开发符合MVC架构的实际应用程序,需要在项目中建立Django应用.每个Django项目可以包含多个Django应用.建立应用的语法为: #python manage.pystartapp ...

  7. Python高效编程技巧实战 实战编程+面试典型问题 中高阶程序员过渡

    下载链接:https://www.yinxiangit.com/603.html 目录:   如果你想用python从事多个领域的开发工作,且有一些python基础, 想进一步提高python应用能力 ...

  8. 分析Python中解析构建数据知识

    分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...

  9. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

随机推荐

  1. Ubuntu下postgresql安装

    第一步:在Ubuntu下安装Postgresql         1.使用 apt-get install 安装          zhang@ubuntu:~/protgresql#sudo apt ...

  2. paip.执行shell cmd 命令uapi java php python总结

    paip.执行shell cmd 命令uapi java php python总结 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:h ...

  3. Apache JMeter 测试Http请求

    环境安装:JDK 下载:http://jmeter.apache.org/download_jmeter.cgi 启动: 简单HTTP请求测试

  4. Maven学习总结(五)——聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...

  5. Leetcode 26 Remove Duplicates from Sorted Array STL

    题目本身是去重 由于我很懒,所以用了STL库里的unique函数来去重,小伙伴们可以考虑自己实现去重的函数,其实并不复杂. class Solution { public: int removeDup ...

  6. 在线视频转gif动画工具 在线视频转gif动画工具下载

    在线视频转gif动画工具 在线视频转gif动画工具下载 http://www.leawo.cn/space-1723875-do-thread-id-60715.html http://www.lea ...

  7. 斐波那契数列(Fibonacci)递归和非递归实现

    序列前9项为:0, 1, 1, 2, 3, 5, 8, 13, 21 要注意非递归的话就是那一个变量帮助存储当前下一项的值,然后依次挪动两个指针往下即可 注意如果n太大 会溢出             ...

  8. LeetCode:Longest Substring Without Repeating Characters(最长不重复子串)

    题目链接 Given a string, find the length of the longest substring without repeating characters. For exam ...

  9. rocketmq总结

    1:角色关系 2:顺序消息 消费消息的顺序要同収送消息的顺序一致,在 RocketMQ 中,主要挃的是尿部顺序,即一类消息为满足顺序性,必须 Producer 单线程顺序収送,丏収送到同一个队列,返样 ...

  10. Unity3D Shader入门指南(二)

    关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...