- Python 学习路径:从零到精通
- Python 环境搭建
- Python 基础语法
- Python 数据结构
- Python 字符串操作
- Python 文件读写
- Python 函数进阶
- Python 面向对象编程(OOP)
- Python 异常处理
- Python 模块与包
- Python 迭代器与生成器
- Python 装饰器
- Flask 基础与入门
- Django 框架基础
- Python RESTful API 开发
- Python Web 表单与用户认证
- Python 数据的操作
- SQLAlchemy ORM 的使用
- Pandas 数据分析基础
- Numpy 数值计算
- 数据可视化(Matplotlib, Seaborn)
- 数据导入导出(CSV, Excel, JSON)
- 使用 requests 库进行 HTTP 请求
- 使用 BeautifulSoup 或 Scrapy 进行网页解析
- 线程与进程的概念
- 使用 threading 模块实现多线程
- 使用 multiprocessing 模块实现多进程
- GIL(全局解释器锁)的概念与影响
- Python 自动化脚本
- Python 常用设计模式
- Python 性能分析工具
- Python 内存管理与优化
- 并行与异步编程(asyncio, concurrent.futures)
- 测试驱动开发(TDD)
- WebSocket 实时通信
- Python GraphQL API 开发
- 前后端分离与前端框架(Vue.js, React)的集成
- 使用 Docker 容器化部署 Python 应用
- CI/CD 流程的自动化(GitHub Actions, Jenkins)
- Scikit-learn, TensorFlow 或 PyTorch 的基础知识
- 数据预处理与特征工程
- 构建与训练模型
- 模型评估与调优
- Hadoop 与 Spark 基础
- 使用 PySpark 进行大数据处理
- 分布式计算与数据流处理
- 基本的加密与解密技术
- 简单的网络安全工具(如端口扫描、漏洞检测)
- Web 安全与常见攻击防御(如 SQL 注入、XSS)
- 项目的协作流程
- 撰写高质量的代码与文档
Python 性能分析工具
class ncalls,cProfilePython 提供了一些强大的性能分析工具,可以帮助开发者找出代码中的性能瓶颈并进行优化。以下是常用的性能分析工具的介绍及使用示例,包括 cProfile
和 timeit
。
1. cProfile
概念: cProfile
是 Python 的内置性能分析工具,用于提供详细的程序运行时间和函数调用次数的统计信息。它能够帮助开发者了解程序的执行时间以及各个函数的调用频率,从而找出可能存在性能问题的部分。
基本使用:
import cProfile
def example_function():
total = 0
for i in range(10000):
total += i
return total
cProfile.run('example_function()')
输出分析:
ncalls
: 函数调用次数。tottime
: 函数自身消耗的总时间(不包括调用的子函数)。percall
: 函数的平均执行时间(tottime/ncalls
)。cumtime
: 函数及其调用的所有子函数消耗的总时间。filename:lineno(function)
: 函数的名称及其定义所在的文件和行号。
输出示例:
4 function calls in 0.001 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.001 0.001 example.py:4(example_function)
1 0.000 0.000 0.001 0.001 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.001 0.001 0.001 0.001 {range}
2. timeit
概念: timeit
模块用于精确测量小段代码的执行时间,尤其适合用来比较不同代码实现的效率。timeit
可以通过在多次执行后取平均值来避免偶然因素影响,提供更准确的时间测量结果。
基本使用:
- 直接在代码中使用:
import timeit
# 测量一段代码的执行时间
execution_time = timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
print(f'Execution time: {execution_time}')
- 使用装饰器或上下文管理器:
# 测量函数执行时间
def test_function():
return "-".join(str(n) for n in range(100))
execution_time = timeit.timeit(test_function, number=10000)
print(f'Execution time: {execution_time}')
- 使用命令行:
python -m timeit '"-".join(str(n) for n in range(100))'
示例输出:
10000 loops, best of 5: 50.5 usec per loop
3. line_profiler
概念: line_profiler
是一个第三方的 Python 性能分析工具,它可以细化到函数内部的每一行代码的执行时间。这对于优化特定函数的内部逻辑非常有用。
安装:
pip install line_profiler
使用方法:
- 定义需要分析的函数:
from line_profiler import LineProfiler
def slow_function():
total = 0
for i in range(10000):
total += i
return total
profiler = LineProfiler()
profiler.add_function(slow_function)
profiler.enable_by_count()
# 执行函数
slow_function()
# 打印分析结果
profiler.print_stats()
示例输出:
Timer unit: 1e-06 s
Total time: 0.000758 s
File: example.py
Function: slow_function at line 4
Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 def slow_function():
5 1 3 3.0 0.4 total = 0
6 10001 745 0.1 98.3 for i in range(10000):
7 10000 10 0.0 1.3 total += i
8 1 0 0.0 0.0 return total
4. memory_profiler
概念: memory_profiler
是另一个常用的第三方工具,它用于分析 Python 程序的内存使用情况,特别是分析哪些函数占用了大量内存。
安装:
pip install memory_profiler
使用方法:
- 定义需要分析的函数:
from memory_profiler import profile
@profile
def my_function():
a = [i for i in range(10000)]
return a
my_function()
示例输出:
Filename: example.py
Line # Mem usage Increment Line Contents
================================================
4 10.7 MiB 10.7 MiB @profile
5 def my_function():
6 12.7 MiB 2.0 MiB a = [i for i in range(10000)]
7 12.7 MiB 0.0 MiB return a
5. Py-Spy
概念: Py-Spy
是一个采样分析器,用于分析正在运行的 Python 程序的性能,而不需要修改代码或重新启动程序。它可以实时展示程序的调用栈信息,并生成火焰图,帮助快速识别性能瓶颈。
安装:
pip install py-spy
使用方法:
- 使用 Py-Spy 进行实时分析:
py-spy top --pid <pid>
- 生成火焰图:
py-spy record -o profile.svg --pid <pid>
总结
cProfile
: 用于全面分析函数的调用次数和时间消耗。timeit
: 用于测量小段代码或函数的执行时间,尤其适合做性能比较。line_profiler
: 用于分析函数内部每行代码的执行时间。memory_profiler
: 用于分析内存使用情况。Py-Spy
: 用于实时分析正在运行的 Python 程序。
这些工具结合使用,可以帮助开发者在不同的场景下进行全面的性能分析与优化。
评论区
评论列表
{{ item.user.nickname || item.user.username }}