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和MD5实现网站挂马检测程序
Mar 13 Python
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python中使用SAX解析xml实例
Nov 21 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
分析Python读取文件时的路径问题
Feb 11 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
Python 离线工作环境搭建的方法步骤
Jul 29 Python
关于Python 常用获取元素 Driver 总结
Nov 24 Python
pycharm 设置项目的根目录教程
Feb 12 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
python 制作磁力搜索工具
Mar 04 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 学习提高路线分享
2011/10/23 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
就业自荐书
2013/12/05 职场文书
房地产开盘策划方案
2014/02/10 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
社区健康教育工作方案
2014/06/03 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
详解Python牛顿插值法
2021/05/11 Python
Golang表示枚举类型的详细讲解
2021/09/04 Golang
Python中异常处理用法
2021/11/27 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript