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中DOM方法的动态性
Apr 11 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python更改已存在excel文件的方法
May 03 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
python中元组的用法整理
Jun 15 Python
Python selenium实现断言3种方法解析
Sep 08 Python
分享提高 Python 代码的可读性的技巧
Mar 03 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
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
JSONP基础知识详解
2017/03/19 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
python实现随机密码字典生成器示例
2014/04/09 Python
python追加元素到列表的方法
2015/07/28 Python
Python对文件操作知识汇总
2016/05/15 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
写给老师的表扬信
2014/01/21 职场文书
求职信范文怎么写
2014/01/29 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
师德师风整改措施
2014/10/24 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python