新手如何在Python3.11中测试函数运行速度以优化性能

阿雪君_3344

阿雪君_3344

2026-11-14

584人浏览

原创

timeit.timeit()最适合测单个函数调用的精确耗时,它自动禁用GC、多次运行取最小值以排除系统抖动;避免用time.time(),因其受调度、IO、GC影响大,尤其在Python 3.11下偏差更明显。

新手如何在python3.11中测试函数运行速度以优化性能

用 timeit 测单个函数调用的精确耗时

timeit 是 Python 内置最可靠的微基准测试工具,它自动禁用 GC、重复多次执行、取最佳值,避免单次测量被系统抖动干扰。新手常直接用 time.time(),但那测的是 wall-clock time,受 I/O、调度、GC 影响极大,尤其在 Python 3.11 的新 GC 策略下偏差更明显。

实操建议:

  • 用 timeit.timeit() 而非 timeit.repeat() 入门——后者适合做统计分析,但新手容易误读中位数/平均值
  • 把待测函数和依赖数据一起写进 setup 字符串,或用 globals 参数传入,避免变量查找开销污染结果
  • 别测带 I/O 或随机行为的函数(比如读文件、调 API),timeit 的“纯计算”假设会崩
  • 示例:测 sum(range(1000)),推荐写法是
    timeit.timeit("sum(range(1000))", number=1000000)
    ,不是 timeit.timeit(sum(range(1000)), ...)——后者会先执行再传结果,完全测错了

用 cProfile 定位慢在哪一行、哪个子函数

当整个函数跑得慢,但不知道瓶颈在哪儿时,timeit 就不够用了。cProfile 是 C 实现的行级分析器,在 Python 3.11 中对协程和新字节码(如 CALL 指令优化)支持更稳,比旧版 profile 快 5–10 倍且误差更小。

实操建议:

  • 别用 python -m cProfile script.py 测脚本全局——你会被 import 开销和顶层代码淹没,专注测目标函数:用
    cProfile.run('my_func(42)', sort='cumtime')
  • 关注 cumtime 列(累计时间),而非 tottime(纯函数内耗时),才能看出是自己函数慢,还是它调的 json.loads 或 re.search 拖累的
  • 输出太长?加 p = pstats.Stats('profile.out'); p.sort_stats('cumtime').print_stats(10) 只看前 10 行
  • 注意:cProfile 本身有约 5%–10% 运行时开销,不能代替 timeit 做微秒级精度对比

Python 3.11 新特性:用 perf 工具链抓底层热点

Python 3.11 启用了自适应专用指令(如 LOAD_FAST_LOAD_FAST),但这些优化是否生效、是否被你的数据分布触发,cProfile 看不到。这时得靠 Linux 的 perf + py-spy 或原生 perf 支持(需编译时启用 --enable-profiling)。

Biopython
Biopython

全面的分子生物学工具集。适用于序列操作、文件解析(FASTA/GenBank/PDB)、系统发育分析,以及通过 Bio.Entrez 以编程方式访问 NCBI/

下载

实操建议:

  • 确认你的 Python 是用 ./configure --enable-profiling 编译的(Ubuntu/Debian 的 python3.11-dev 包默认开启;macOS Homebrew 默认关,得重装)
  • 运行
    perf record -e cycles,instructions,cache-misses -g python3.11 my_script.py
    ,再用 perf report --no-children 查看哪些字节码指令或 C 函数占 CPU 周期最多
  • 常见信号:PyObject_GetAttr 高频出现 → 属性访问太碎,考虑用 __slots__ 或缓存;PyEval_EvalFrameDefault 占比超 70% → 真正的 Python 层瓶颈,不是 C 扩展拖慢
  • Windows 用户绕过:用 py-spy record -p -o profile.svg,它不依赖内核 perf,但采样精度略低

别踩这些坑:计时结果不可比的典型场景

很多“优化”后反而变慢,是因为计时方式本身引入了偏差。Python 3.11 的 JIT 尝试(虽未正式启用)和更快的启动路径,让冷启动/热启动差异比以前更敏感。

必须避开的操作:

  • 在 Jupyter 中用 %timeit 测含 import 的函数——每次运行都可能重新导入,而 import 在 3.11 有模块缓存预热逻辑,首次耗时高但后续骤降
  • 用不同 number 值比较两个 timeit 结果——比如一个设 number=10000,另一个设 number=100000,得出“快 10 倍”的假结论
  • 测递归函数时不控制深度,导致栈溢出或 GC 触发时机错乱;Python 3.11 的 GC 对深层嵌套对象回收策略变了,影响显著
  • 忽略输入数据特征:同一函数,测 [1]*1000 和测 list(range(1000)) 可能差 3 倍——因为 3.11 对小整数缓存和 list 预分配做了调整

真实优化永远从“明确问题场景+稳定可复现的输入+匹配生产环境的计时方式”开始,而不是一上来就改算法。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

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

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

下载

相关标签:

python python3

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

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1911

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5404

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1869

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

32777

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3867

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3867

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1263

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

3003

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程