Python读取大文件处理速度变慢的排查与优化

Ivy
Ivy
发布时间:2026-10-13| 5人浏览过
原创

本文分析Python处理大文件时速度逐渐变慢的现象,排查了GC和Git同步等干扰因素,最终定位到使用in dict.keys()进行键存在性检查导致的性能瓶颈。通过对比测试,推荐使用in dict直接判断或has_key()方法,显著提升处理效率,并解释了Python3中has_key()被移除的背景。

Python大文件处理性能问题背景

背景:

近日同事编写Python代码处理一个约400至500MB的文件,执行一系列逻辑直观的数据处理操作。然而,任务耗时一天仍未完成。我们需要找出导致这一性能问题的根本原因。

解决:

1. 同事在不同处理阶段打印当前时间,在关键代码处插入如下时间记录代码:


print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) 

通过观察发现,随着处理进行,单次操作耗时逐渐增加,即程序执行速度越来越慢。

性能瓶颈排查过程

2. 导致速度变慢的原因分析:

1)首先怀疑是垃圾回收(GC)机制的问题。有资料指出Python列表append操作在后期会变慢,尝试通过禁止GC来优化:

使用gc.disable()和gc.enable()控制GC开关。

2)调整GC后问题依旧存在。随后考虑到Git版本控制可能引发的问题,因为append操作可能导致Git不断同步,于是删除.git文件夹,但问题仍未解决。

3)进一步排查发现,极有可能是字典键值检查方式不当。使用in dict.keys()判断key是否存在于dict中,该方式效率极低。参考相关性能对比文章:

① 使用in dict.keys()的效率测试:

② 使用has_key()的效率测试:


结果显示has_key()效率较为稳定。修改代码后,问题得到解决。

Python字典查找规范与最佳实践

后话:

最初代码确实使用了has_key(),但上传代码时因公司代码审查未通过,提示禁止使用该函数,被迫改为in dict.keys()。经查阅资料得知,Python3中已直接移除has_key()函数,因此公司规范禁止使用。那么禁止后该如何正确判断?Python中的in操作符非常智能,能自动判断key是否存在于字典中。因此,最规范的做法既不是has_key(),也不是in dict.keys(),而是直接使用in dict。判断key在字典中时,切勿使用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

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对本站的支持。

参考资料:

https://www.douban.com/group/topic/44472300/

http://www.it1352.com/225441.html

https://www.jb51.net/article/145424.htm

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。