当前位置: 首页 > java >正文

python profiling

如果一个函数运行很慢,可以通过以下方法来找出具体哪个函数拖慢了程序。

  • 使用cprofile分析
    cprofile可以很容易的分析一个函数以及其子函数的cpu耗时情况,一般可以优先选择这个方法,它可以定位到代码行,但是不会给出函数的调用关系。
import cProfile
import pstatsdef parent_func():child_func()def child_func():helper()def helper():pass# 运行分析
profiler = cProfile.Profile()
profiler.enable()
parent_func()
profiler.disable()# 输出报告
stats = pstats.Stats(profiler)
stats.sort_stats("cumtime")  # 按总耗时排序
stats.print_stats()
  • 使用line_profiler做性能分析
    这个库的优点是列出函数每一行的耗时,但是缺点是要做profiling的函数需要手动加入。

from line_profiler import LineProfilerdef parent_func():child_func()def child_func():helper()def helper():pass# 动态分析所有函数
profiler = LineProfiler()
profiler.add_function(parent_func)
profiler.add_function(child_func)
profiler.add_function(helper)# 运行并输出报告
profiler.runcall(parent_func)
profiler.print_stats()

对于教简单的代码可以用lineprofile的装饰器装饰,看起来更优雅。

from line_profiler import profile@profile
def main():for _ in range(1000):helper()  # 子函数调用@profile
def helper():  # 子函数单独装饰x = [i**2 for i in range(100)]if __name__ == "__main__":main()
http://www.xdnf.cn/news/14338.html

相关文章:

  • (十六)GRU 与 LSTM 的门控奥秘:长期依赖捕捉中的遗忘 - 更新机制对比
  • ShardingSphere 全面学习路径
  • 编译链接实战(31)再论静态库的本质是啥
  • LeetCode 2300.咒语和药水的成功对数
  • leetcode复盘(1)
  • 【项目实训】【项目博客#08】HarmonySmartCodingSystem系统前后端知识图谱与可视化实现(5.12-6.1)
  • 深入理解Redis五种基本数据类型
  • (LeetCode 动态规划(基础版)) 279. 完全平方数 (动态规划dp)
  • java复习 14
  • 深度学习入门知识
  • DP刷题练习(二)
  • 【学习笔记】深入理解Java虚拟机学习笔记——第7章 虚拟机类加载机制
  • 关于layui select option莫名多一行的问题
  • EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
  • 内部代理服务器单点故障导致后端服务概率性失败
  • 算法的几大模块
  • SpringBoot入门 springboot模版注入问题
  • 单例模式的好处
  • 火山引擎解码生态型增长铁律
  • QMI8658A 六轴惯性测量单元的应用介绍
  • Tomcat配置学习
  • 剑指offer26_顺时针打印矩阵
  • Java单例模式的七种实现方式每种方式的应用场景和最佳使用场景分析
  • LeetCode 第75题:颜色分类
  • 设计模式(10)——创建型模式之抽象工厂
  • 机器学习模型评估与选择
  • Python 爬虫入门 Day 4 - 模拟登录爬虫与 Session 维持
  • 【极客时间】大模型RAG进阶实战营毕业总结
  • 通过 O-RAN 传感进行异常识别和防护
  • 打造丝滑滚动体验:Scroll-driven Animations 正式上线!