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列表操作实例
Jan 14 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
Python随机函数random()使用方法小结
Apr 29 Python
PyQt5固定窗口大小的方法
Jun 18 Python
python list转置和前后反转的例子
Aug 26 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
Django 解决由save方法引发的错误
May 21 Python
Python代码中如何读取键盘录入的值
May 27 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python爬虫 requests-html的使用
Nov 30 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
python基础之文件处理知识总结
May 23 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 魔术函数使用说明
2010/02/21 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
Python Tkinter简单布局实例教程
2014/09/03 Python
浅谈Python的异常处理
2016/06/19 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
python中封包建立过程实例
2021/02/18 Python
经典演讲稿范文
2013/12/30 职场文书
协议书的格式
2014/04/23 职场文书
广播体操口号
2014/06/18 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
民间借贷借条如何写
2015/05/26 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python