0

0

Python 性能优化中的常见误区

冷漠man

冷漠man

发布时间:2026-02-14 22:51:09

|

302人浏览过

|

来源于php中文网

原创

timeit测性能需控变量:用repeat取最小值、setup隔离依赖、禁用gc;extend非万能,大迭代器慎用;@lru_cache需规避不可哈希参数;async不加速cpu密集任务。

python 性能优化中的常见误区

timeit 测函数性能,却忘了控制变量

很多人一上来就写 timeit.timeit('my_func()', number=100000),结果发现 A 比 B 快,上线后反而更慢——根本原因是没隔离解释器启动、GC 干扰、缓存预热等噪音。

实操建议:

  • timeit.repeat 而不是单次 timeit,取多次运行的最小值(排除 GC 突发暂停)
  • 把待测函数和依赖数据一起放进 setup 参数,避免全局查找开销干扰测量
  • 测试前手动调用 gc.disable(),尤其在对比小对象创建/销毁时,否则 GC 时间会混进结果里
  • 如果函数内部有 I/O 或系统调用,timeit 测出来的只是“调度时间”,得换 cProfileperf

list.appendlist.extend 混用导致隐式扩容

看到“批量加元素”就无脑用 extend,其实不总对:如果传入的是生成器或迭代器,extend 会先转成 list 再扩容,内存翻倍;而循环 append 虽慢但省内存。

常见错误现象:处理大文件行数据时,lines.extend(file) 让内存暴涨 2x,OSError: Cannot allocate memory 直接挂掉。

立即学习Python免费学习笔记(深入)”;

实操建议:

  • 确认输入是已知长度的 listtuple 才用 extend;否则优先用 itertools.chain + 列表推导,或直接生成器消费
  • 想提前预留空间?Python 列表不支持 reserve,但可以用 [None] * n 初始化再赋值,适合长度确定的场景
  • append 平均摊还 O(1),但连续调用 100 万次仍比一次 extend 慢 3–5 倍——得看你的瓶颈在 CPU 还是内存

盲目用 @lru_cache 反而拖慢程序

@lru_cache 不是银弹。参数含不可哈希类型(比如 dictlist)、函数本身极轻量(如纯算术)、或缓存命中率长期低于 10%,它只会增加哈希开销和内存占用。

WebShop开源网上购物系统
WebShop开源网上购物系统

WebShop网上商店系统专注中小企业、个人的网上购物电子商务解决方案,淘宝商城系统用户/个人首选开店的购物系统!综合5500多用户的意见或建议,从功能上,界面美观上,安全性,易用性上等对网店系统进行了深度的优化,功能更加强大,界面模板可直接后台选择。WebShop网上商店系统特点:1 对于中小企业、个体、个人、店主和淘宝易趣等卖家,可利用WebShop快速建立购物网。2 源代码开放,利用WebS

下载

使用场景错配典型表现:json.loads 结果缓存后,解析速度变慢;或递归函数加了 @lru_cache 却因参数含 numpy.ndarray 直接抛 TypeError: unhashable type

实操建议:

  • 先用 functools.cache(Python 3.9+)替代 @lru_cache(),它省去哈希计算,适合无参或参数全可哈希的函数
  • 检查缓存大小:默认 maxsize=128,高频低重复场景下可能频繁淘汰,设为 None 或合理整数
  • 参数含复杂对象?自己实现 key 生成逻辑,或改用 functools.singledispatch 分路处理

asyncio 加速 CPU 密集任务

async/await 对纯计算毫无帮助。拿 asyncio.run(calculate_pi(1000000)) 替代同步版本,不仅不快,还会因事件循环调度多出 10%–20% 开销。

性能影响很实在:CPU 密集型任务切 asyncio 后,GIL 依然锁死,协程无法并行,反而增加上下文切换成本。

实操建议:

  • CPU 密集 → 用 multiprocessingconcurrent.futures.ProcessPoolExecutor
  • I/O 密集 → 才轮到 asyncio,且确保所有 I/O 调用都是 async 版本(比如 aiohttp 而非 requests
  • 混合场景?用 loop.run_in_executor 把 CPU 工作丢给线程池,但注意线程池不是万能解——Python 线程受 GIL 限制,只对释放 GIL 的操作(如 numpy 计算)有效

最容易被忽略的是:async 函数里混用同步阻塞调用(比如 time.sleepsqlite3.connect),整个 event loop 就卡死了,连带其他协程一起停摆。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

437

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

318

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

673

2023.08.10

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

347

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1078

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

178

2025.09.12

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号