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 12 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
python清空命令行方式
Jan 13 Python
tensorflow 查看梯度方式
Feb 04 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
python如何建立全零数组
Jul 19 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
php通过COM类调用组件的实现代码
2012/01/11 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
使用jquery实现以post打开新窗口
2014/03/19 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
vue.js表格分页示例
2016/10/18 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
香港礼品网站:GiftU eshop
2017/09/01 全球购物
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
大学军训感言300字
2014/03/09 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
改进工作作风心得体会
2016/01/23 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
Python图片检索之以图搜图
2021/05/31 Python
浅谈MySQL函数
2021/10/05 MySQL
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js