python读取大文件越来越慢的原因与解决


Posted in Python onAugust 08, 2019

背景:

今天同事写代码,用python读取一个四五百兆的文件,然后做一串逻辑上很直观的处理。结果处理了一天还没有出来结果。问题出在哪里呢?

解决:

1. 同事打印了在不同时间点的时间,在需要的地方插入如下代码:

print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

发现一个规律,执行速度到后面时间越来越长,也就是处理速度越来越慢。

2. 为什么会越来越慢呢?

1)可能原因1,GC 的问题,有篇文章里面写,python list append 的时候会越来越慢,解决方案是禁止GC:

使用 gc.disable()和gc.enable()

 2)改完上面,仍然不行,然后看到一篇文章里面写,可能是因为 git 导致的,因为append 的时候 git 会不断同步,会出问题,于是删除 .git 文件夹,结果还是不行。

3)继续查询,发下一个及其有可能出问题的地方。dict 的 in dict.key(),判断 key 是否在 dict 里面,这个的效率是非常低的。看到一篇文章比较了效率:

          ① 使用  in dict.keys() 效率:

python读取大文件越来越慢的原因与解决

          ② 使用 has_key()  效率:

python读取大文件越来越慢的原因与解决

发现 has_key() 效率比较稳定。于是修改,问题解决。

后话:

最初的时候,的确是使用 has_key(), 结果后面上传代码的时候,公司代码检查过不了,提示不能使用这个函数,只能改成 in dict.key() 这种方式,为什么公司不让这么传呢?经过一番百度,发现原因所在:在 python3 中,直接将 has_key() 函数给删除了,所以禁止使用。那禁止了该怎么办呢?原来 python 中 in 很智能,能自动判断 key 是否在字典中存在。所以最正规的做法不是 has_key(),   更不是 in dict.keys(), 而是 in dict.  判断 key 在 map 中,千万别用 in dict.keys() !!!

附录:

in、 in dict.keys()、 has_key() 方法实战对比:

>>> a = {'name':"tom", 'age':10, 'Tel':110}
>>> a
{'age': 10, 'Tel': 110, 'name': 'tom'}
>>> print 'age' in a
True
>>> print 'age' in a.keys()
True
>>>
>>> print a.has_key("age")
True

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

参考资料:

Python 相关文章推荐
Python实现excel转sqlite的方法
Jul 17 Python
python将字典内容存入mysql实例代码
Jan 18 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
python实现多线程端口扫描
Aug 31 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
Python如何绘制日历图和热力图
Aug 07 Python
在Python中字典按值排序的实现方法
Nov 12 Python
python 实现性别识别
Nov 21 Python
聊聊Python String型列表求最值的问题
Jan 18 Python
Python实现Singleton模式的方式详解
Aug 08 #Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 #Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 #Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 #Python
pandas 选取行和列数据的方法详解
Aug 08 #Python
pandas 对日期类型数据的处理方法详解
Aug 08 #Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 #Python
You might like
php文件下载处理方法分析
2015/04/22 PHP
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
详解python之配置日志的几种方式
2017/05/22 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
10个Python小技巧你值得拥有
2018/09/29 Python
python爬取网易云音乐评论
2018/11/16 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
战友聚会主持词
2014/04/02 职场文书
2014中考励志标语
2014/06/05 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
退税申请报告怎么写
2015/05/18 职场文书
原告代理词范文
2015/05/25 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript