Python性能分析实战:%timeit与Line_profiler详解

陆遥
陆遥
发布时间:2026-10-11| 3人浏览过
原创

本文介绍Python中两种常用的性能分析工具:%timeit与Line_profiler。通过示例演示如何使用%timeit进行单行或多行代码的性能测试,包括自定义运行次数与循环次数。同时,详细讲解如何安装、加载Line_profiler,并利用%lprun命令进行逐行性能分析,帮助开发者快速定位代码瓶颈。

环境准备

建议开发者使用Anaconda环境进行Python开发,以便更好地管理依赖包。Anaconda用户推荐使用conda进行安装,非Anaconda用户可通过pip进行安装。

使用%timeit进行性能测试

%timeit是IPython提供的魔法命令,用于精确测量代码片段的执行时间。它默认执行7次测试,每次循环100万次,并返回平均值和标准偏差,能够有效减少系统波动对测试结果的影响。

单行代码测试

对于单行代码,直接使用%timeit即可。例如,测试列表推导式的执行时间:

#### magics命令%timeit的简单用法
%timeit [num for num in range(20)]

#### 输出
1.08 µs ± 43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

自定义测试参数

可以通过-r选项自定义执行次数,通过-n选项自定义循环次数。例如,执行5次测试,每次循环100次:

#### 在%timeit magic命令中自定义运行和循环数
%timeit -r5 -n100 [num for num in range(20)]

1.01 µs ± 5.75 ns per loop (mean ± std. dev. of 5 runs, 100 loops each)

多行代码块测试

对于多行代码块,需使用%%timeit(双百分号)。例如,测试一个包含多个操作的代码块:

#### 使用timeblock%%代码分析
%%timeit -r5 -n1000
for i in range(10):
  n = i**2
  m = i**3
  o = abs(i)
  
#### 输出
10.5 µs ± 226 ns per loop (mean ± std. dev. of 5 runs, 1000 loops each)

使用Line_profiler进行逐行分析

当需要深入分析函数内部每一行的执行时间时,可以使用Line_profiler工具。

安装与加载

首先,通过conda或pip安装Line_profiler:

#### 安装line_profiler软件包
conda install line_profiler

然后在IPython中加载扩展:

#### 加载line_profiler的Ipython扩展
%load_ext line_profiler

逐行性能分析

使用%lprun命令,并指定要分析的函数名。例如,定义一个转换高度和重量的函数:

#### 定义函数
def conversion(ht_mtrs, wt_lbs ):
  ht_cms = [ht*100 for ht in ht_mtrs]
  wt_kgs = [wt*.4535 for wt in wt_lbs]
  
#### 定义高度和重量列表:
ht = [5,5,4,7,6]
wt = [108, 120, 110, 98]

然后使用%lprun进行分析:

#### 使用line_profiler分析函数
%lprun -f conversion conversion(ht,wt)

输出结果包含6列信息:行号、命中次数、总时间、每次命中时间、占总时间的百分比以及代码内容。注意,第1列省略了函数定义语句的行号,第3列的时间单位参考第一行输出。

---------------------------------------------------------------
#### 输出
Total time: 1.46e-05 s

File: <ipython-input-13-41e195af43a9>

Function: conversion at line 2

Line #   Hits     Time Per Hit  % Time Line Contents
==============================================================
   2    1    105.0  105.0   71.9   ht_cms = [ht*100 for ht in ht_mtrs]
   3    1     41.0   41.0   28.1   wt_kgs = [wt*.4535 for wt in wt_lbs]

总结

通过%timeit和Line_profiler,开发者可以高效地进行Python代码的性能分析与优化。%timeit适用于快速评估代码片段的执行时间,而Line_profiler则能深入分析函数内部的每一行代码,帮助定位性能瓶颈。

以上就是Python性能分析技巧的详细内容,更多关于Python性能优化的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。