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 解析XML文件
Apr 15 Python
pycharm 使用心得(三)Hello world!
Jun 05 Python
python查询mysql中文乱码问题
Nov 09 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
使用python3构建文件传输的方法
Feb 13 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
python实现学生信息管理系统(精简版)
Nov 27 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程序
2006/10/09 PHP
php中Smarty模板初体验
2011/08/08 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
限制文本字节数js代码
2007/03/06 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
利用Python实现kNN算法的代码
2019/08/16 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
CSS3盒子模型详解
2013/04/24 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
写给女生的道歉信
2014/01/14 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
学校工作推荐信范文
2014/07/11 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
放射科岗位职责
2015/02/14 职场文书
家长高考寄语
2015/02/27 职场文书
任命通知范文
2015/04/21 职场文书
出生证明格式
2015/06/15 职场文书
师范生见习总结范文
2015/06/23 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers