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列表操作实例
Jan 14 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
python获取代理IP的实例分享
May 07 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
python批量爬取下载抖音视频
Jun 17 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
python爬虫快速响应服务器的做法
Nov 24 Python
怎么用Python识别手势数字
Jun 07 Python
Python进行区间取值案例讲解
Aug 02 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
Python: glob匹配文件的操作
2020/12/11 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
销售高级职员求职信
2013/10/29 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
学生会主席事迹材料
2014/01/28 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
2016年学校招生广告语
2016/01/28 职场文书
世界文化遗产导游词
2019/08/07 职场文书
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript