Python大数据量文本文件问题怎么解决


这篇文章主要介绍“Python大数据量文本文件问题怎么解决”,在日常操作中,相信很多人在Python大数据量文本文件问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python大数据量文本文件问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Python 3.6.2Win 10 内存 8G,CPU I5 1.6 GHz这个作品来源于一个日志解析工具的开发,这个开发过程中遇到的一个痛点,就是日志文件多,日志数据量大,解析耗时长。在这种情况下,寻思一种高效解析数据解析方案。1、采用多线程读取文件2、采用按块读取文件替代按行读取文件由于日志文件都是文本文件,需要读取其中每一行进行解析,所以一开始会很自然想到采用按行读取,后面发现合理配置下,按块读取,会比按行读取更高效。按块读取来的问题就是,可能导致完整的数据行分散在不同数据块中,那怎么解决这个问题呢?解答如下:将数据块按换行符n切分得到日志行列表,列表第一个元素可能是一个完整的日志行,也可能是上一个数据块末尾日志行的组成部分,列表最后一个元素可能是不完整的日志行(即下一个数免费云主机域名据块开头日志行的组成部分),也可能是空字符串(日志块中的日志行数据全部是完整的),根据这个规律,得出以下公式,通过该公式,可以得到一个新的数据块,对该数据块二次切分,可以得到数据完整的日志行上一个日志块首部日志行 +n + 尾部日志行 + 下一个数据块首部日志行 + n + 尾部日志行 + …3、将数据解析操作拆分为可并行解析部分和不可并行解析部分数据解析往往涉及一些不可并行的操作,比如数据求和,最值统计等,如果不进行拆分,并行解析时势必需要添加互斥锁,避免数据覆盖,这样就会大大降低执行的效率,特别是不可并行操作占比较大的情况下。对数据解析操作进行拆分后,可并行解析操作部分不用加锁。考虑到Python GIL的问题,不可并行解析部分替换为单进程解析。4、采用多进程解析替代多线程解析采用多进程解析替代多线程解析,可以避开Python GIL全局解释锁带来的执行效率问题,从而提高解析效率。5、采用队列实现“协同”效果引入队列机制,实现一边读取日志,一边进行数据解析:日志读取线程将日志块存储到队列,解析进程从队列获取已读取日志块,执行可并行解析操作并行解析操作进程将解析后的结果存储到另一个队列,另一个解析进程从队列获取数据,执行不可并行解析操作。注意:需要合理的配置单次读取文件数据块的大小,不能过大,或者过小,否则都可能会导致数据读取速度变慢。笔者实践环境下,发现10M~15M每次是一个比较高效的配置。到此,关于“Python大数据量文本文件问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: c语言中的case怎么使用

这篇文章主要介绍“c语言中的case怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“c语言中的case怎么使用”文章能帮助大家解决问题。 在c语言中,case的意思为“情况”、“案例”,是用于switch语句的关…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/02 22:04
下一篇 03/02 22:04

相关推荐