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解决鸡兔同笼问题的方法
Dec 20 Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
Python 实现链表实例代码
Apr 07 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
Jul 04 Python
Python 运行 shell 获取输出结果的实例
Jan 07 Python
eclipse创建python项目步骤详解
May 10 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Pythonic版二分查找实现过程原理解析
Aug 11 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/05 新手入门
谈谈PHP语法(4)
2006/10/09 PHP
php判断字符以及字符串的包含方法属性
2008/08/30 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
python mysql断开重连的实现方法
2019/07/26 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
采购部部长岗位职责
2014/02/06 职场文书
护士进修自我鉴定
2014/02/07 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
JavaScript数组 几个常用方法总结
2021/11/11 Javascript