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利用elaphe制作二维条形码实现代码
May 25 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
python 生成器需注意的小问题
Sep 29 Python
Python中os模块的简单使用及重命名操作
Apr 17 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
php你的验证码安全码?
2007/01/02 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
Angular 如何使用第三方库的方法
2018/04/18 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python中的上下文管理器和with语句的使用
2018/04/17 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python地震数据可视化详解
2019/06/18 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
职业生涯规划书范文
2014/03/10 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
战略合作意向书范本
2014/04/01 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
2014年团总支工作总结
2014/11/21 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL