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批量同步web服务器代码核心程序
Sep 01 Python
python numpy格式化打印的实例
May 14 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
django query模块
Apr 20 Python
Python中psutil的介绍与用法
May 02 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
Python中Selenium模块的使用详解
Oct 09 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
python中redis包操作数据库的教程
Apr 19 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
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
python实现dict版图遍历示例
2014/02/19 Python
python中使用enumerate函数遍历元素实例
2014/06/16 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python 线程的五个状态
2020/09/22 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
python 高阶函数简单介绍
2021/02/19 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
numpy实现RNN原理实现
2021/03/02 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
物流经理自我评价
2013/09/23 职场文书
项目计划书范文
2014/01/09 职场文书
小学家长会邀请函
2014/01/23 职场文书
自我鉴定总结
2014/03/24 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
新生儿未入户证明
2015/06/23 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python