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生成器(Generator)详解
Apr 13 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
Python 多进程和数据传递的理解
Oct 09 Python
python线程中同步锁详解
Apr 27 Python
Python绘制3D图形
May 03 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
python基于exchange函数发送邮件过程详解
Nov 06 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
Python修改DBF文件指定列
Dec 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
php中的ini配置原理详解
2014/10/14 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Python读写zip压缩文件的方法
2018/08/29 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
工作人员思想汇报
2014/01/09 职场文书
项目合作计划书
2014/01/09 职场文书
教师评优事迹材料
2014/01/10 职场文书
继承权公证书
2014/04/09 职场文书
经营理念标语
2014/06/21 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL