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

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.dtcms.com/a/251954.html

相关文章:

  • DNS递归查询步骤
  • 盟接之桥EDI软件:开启制造业数据对接与协同的新纪元
  • https说明
  • 数据库核心技术深度剖析:事务、索引、锁与SQL优化实战指南(第五节)----数据库事务
  • anaconda安装及问题解决
  • 【LeetCode 207】课程表(有向无环图 DAG、拓扑排序)
  • 【Android】输入路由
  • 器件(九)—对设计的模块进行双脉冲仿真
  • 134-135Elements-UI组件库
  • 仿muduo库实现并发服务器
  • hot100 -- 13.堆系列
  • android CALL 之 RIL、TELEDCOM、PHONE
  • SpringCloud Alibaba场景实践(Nacos篇)
  • c++ algorithm常用算法汇总
  • 13分钟讲解主流Linux发行版
  • 数据库优化实战分享
  • 设备健康管理系统搭建全技术解析:从架构设计到智能运维实践
  • Flink CDC MySQL 时区相差 8 小时问题优雅解决方式
  • 华为OD机试-考勤信息-双指针(JAVA 2025B卷)
  • 第五章:执行计划分析 - 读懂MySQL的执行策略
  • Nginx 配置中·IP地址变量
  • leetcode148-排序链表
  • SimpleQtLogger 使用总结
  • Nginx全面深入学习目录
  • 我的JavaWeb软件开发作品学生信息管理系统项目/JavaWeb软件开发 课程考察标准
  • OmniMeetProTrack 全维会议链智能追录系统——山东大学软件学院创新实训项目博客(六)
  • 零基础学前端-传统前端开发(第四期-JS基础-语法,语句)
  • 【SQLAlchemy系列】 SQLAlchemy 中的多条件查询:or*与 in*操作符
  • 【Docker基础】Docker核心概念:命名空间(Namespace)之PID详解
  • java+vue+SpringBoo旅游网(程序+数据库+报告+部署教程+答辩指导)