代码快一点~生活慢一点~【python性能调试工具分享】

news2024/10/6 10:33:20

背景1

天下武功,为快不破!

上学的时候,有些人考试半小时就已经把卷子写完了。有些人还没写完。

工作的时候,有些人一天就能把活干完了,有些人还没开始。

写论文的时候,有些人代码都写完了,数据都处理好的,有些人连论文题目都没看。

学习的时候,有些人,1年内学到了不少知识。一年快过去了,有些人还没开始。

吃饭的时候,有些人都去吃饭了,有些人还在说:“我把这局(游戏)打完奥”。

生命的长度是有限的

不要浪费时间~

一切都要速度!

因为这个公众号的缘故

经常有一些人来加我微信,然后我就可以看到各种各样的朋友圈内容。

比如某某某,在朋友圈发了一个照片,照片上是一个电脑进度条,显示代码还需要几百个小时才能跑完。文本配的又非常自信,觉得自己的代码要运行几百个小时,自己实在是太牛了。

我就纳闷了,你什么数据,处理需要几百个小时?

我真的看不出来,你哪来的自信,怎么就不知道优化一下你的代码呢?代码需要跑那么久,真的没发现有什么问题嘛?

背景2

现在分析讲究的是定量分析

比如分析公司的时候,要看这个公司的财报数据。

分析中国股市的时候,会看上证指数等。

查看一个人是否发烧,要看体温计的数值。

一个田径运动员,会关注他跳的有多远,跑的有多快,都是通过高度和速度来衡量的。

一个人的成绩好坏,是通过他的考试成绩分数来判断的。

so

那么,我是一个工程师,而且是一个爱写代码的工程师,我要求我写的代码足够快!快到无人打败!

而作为衡量代码运行的速度,就是统计代码中每一个函数的运行时间。

找到那些拖后腿的函数(耗时长的函数),然后想办法优化它。

正文

那么,如何去检测python中每一个函数的运行时间呢?

而且,怎么直观的展示出来?让人一目了然的发现问题?

这个方法不难,看完本文你就知道。

代码

我们创建一个模拟人生的代码,创建一个文件code120701.py,填写下面的代码:

from tqdm import tqdm
import time
import random

class Person:
    def __init__(self, name: str,)  -> None:
        self.name = name
    
    def _sleep(self) -> None:
        time.sleep(random.randint(8, 10)/24)

    def _eat(self) -> None:
        time.sleep(random.randint(3,4)/24)
    
    def _study(self) -> None:
        time.sleep(random.randint(6,9)/24)

    def _entertainment(self) -> None:
        time.sleep(random.randint(5, 6)/24)


    def _day(self) -> None:
        self._study()
        self._entertainment()
        self._eat()
        self._sleep()

    
    def _life(self, days:int=30) -> None:

        _ = [self._day() for i in tqdm(range(days))]
        



def main():
    p = Person(name="统计学人")
    p._life()


if __name__ == "__main__":
    main()

可以看出来,上面代码,就是模拟了一个人一天的基本时间分配。

  1. 学习
  2. 娱乐

每一个行为的需要的时间都是随机的。但是整体上占比都是固定的。

正常运行

通常,我们运行python代码,可能就是这样的

python code122701.py 

这样当然可以。就是普通的运行模式

计时运行

如果你希望给你的代码每一个函数都计算时间的话,你需要这么运行:

python -m cProfile -o profile120701.prof code122701.py 

一起来看一下,这个相当于正常运行,多了几个部分.我们把上面那句话拆解一下:

  1. python:就是调用python软件
  2. -m cProfile:表示额外调用python内置性能评估包cProfile
  3. -o profile120701.prof:表示输出这个上面代码成绩单,一定要注意格式哦-o 成绩单名称.prof
  4. code122701.py:就是你的代码名称。

可视化

上面的成绩单,已经都放在profile120701.prof里面了。但是直接让我们看,看的也不清楚呀。
不如一个图看的清楚。

为了让成绩单看的更加清楚,需要使用snakeviz包来渲染。

如果没安装这个包,要先安装一下:pip install snakeviz

然后再使用snakeviz来查看上面的成绩单,怎么看呢?

这么运行即可:

snakeviz ./profile120701.prof

然后就会自动打开浏览器,就可以看到这个页面。

阅读

首先来看第一张截图

  1. 在冰柱可视化样式中,函数由矩形表示。 根函数是最顶层的矩形,下面是它调用的函数,然后是下面调用的函数,依此类推。 在函数内花费的时间量由矩形的宽度表示。 横跨大部分可视化的矩形表示一个函数占用了其调用函数的大部分时间,而细长的矩形表示一个函数几乎没有使用任何时间。
  2. 左边几个按钮,可以随便点击,选择自己喜欢的样式,只要能帮助你定位问题即可。
  3. 如果不小心下钻到自己都不知道的位置,点击reset zoom即可。
  4. 实在不行,就筛选网页页面。

再看第二张截图

  1. 第二张图是一个表格。主要是了解每一列的意义.
  2. ncalls:调用函数的总数。如果有两个数字,则表示函数递归,第一个是调用总数,第二个是原始(非递归)调用的次数.
  3. totttime:在函数中花费的总时间,不包括调用子函数花费的时间.
  4. percalltottime 除以 ncalls.
  5. cumtime:在这个功能和所有子功能上花费的累计时间.
  6. percallcumtime 除以 ncalls.
  7. filename:lineno(function): 定义函数的文件名和行号,以及函数名.

总结

  1. 如果想看详细介绍,可以点击它的官网查看:
    https://jiffyclub.github.io/snakeviz/

  2. sankeviz其实还支持jupyter notebook,可惜的是vscode版本的jupyter不能用。

  1. snakeviz也就是把cprofile输出的结果给可美化了一下,更好看了。

  2. 还有很多别的性能分析的包,推进大家去看看,但是我觉得大部分会用一个就足够了。

防杠声明

(上面列举的各种情况,只是为了举例子,请勿对号入座,如果发现说的就是你,那就是你了)

最后

后面将会写更多有用的、有意思的文章

如果你也喜欢python、喜欢编程、热爱生活、积极向上、喜欢废话连篇

那就关注、点赞、收藏我文章

我是【统计学人】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ospf不规则区域实验

r11,r3为运行商,要求全网可达 首先现在r13上配置ospf 然后配置一条缺省路由并且下发路由 抓取流量 [r13]acl 2000 [r13-acl-basic-2000]rule permit source any [r13]int g0/0/1 [r13-GigabitEthernet0/0/1]nat outbound 2000 下一步实现ospf100 里面…

Ant Design入门

目录 一:什么是Ant Design? 二:开始使用 三:布局 四:表格 一:什么是Ant Design? Ant Design是阿里蚂蚁金服团队基于React开发的ui组件,主要用于中后台系统的使用。 官网&#x…

【技术】5G技术的应用场景及发展趋势

5G是具有高速率、低时延和大连接特点的新一代宽带移动通信技术。5G系统基于大带宽和大规模天线方案,能实现亚米级高精度定位。 据《5G经济社会影响白皮书》可知,按照2020年5G才大规模商用算起,预计2020年至2025年期间,中国5G发展将…

抓包工具wiresharke及抓包流程

背景:公司的系统在生产环境运行一段时间之后,通过skywalking监控工具发现时不时会有接口调用耗时很长的情况出现。且监控到的数据和华为云ELB的监控日志不匹配,为了验证是否是由华为云ELB转发延迟导致,决定在生产上抓包验证&#…

【应用】博图SCL语言之抢答器应用

使用博图的SCL语言来完成多人抢答器的应用案例。 文章目录 目录 文章目录 前言 一、控制要求和I/O分配 1.控制要求 2.I/O分配 3.具体场景 二、编写 1.建立变量 2.编写 1.四路抢答器互锁 2.抢答提示指示灯 3.提前抢答和超时不抢答 4.完善 三、效果 1.仿真效果 2.虚拟工厂效果 …

IPO OC 系列模拟信号隔离转换模块0-1mA /0-10mA/0-20mA/ 4-20mA/0-75mV/0-2.5V/0-5V/0-10V

概述 IPO OC 系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源,可以向输入端和输出端…

缅怀致敬 继往开来 | 萨师煊教授诞辰100周年纪念主题活动在京举行

2022年12月27日是我国数据库学科奠基人——萨师煊教授诞辰100周年纪念日。为缅怀萨师煊先生对我国数据库领域做出的突出贡献,弘扬萨师煊先生敢为人先、严谨治学的高尚品格,“萨师煊教授诞辰100周年纪念活动”27日在北京举行。本次纪念活动由中国人民大学…

云原生丨手把手教你使用zabbix监控postgresql数据库(超详细讲解)

文章目录一、前言二、什么是zabbix三、zabbix安装步骤四、监控postgresql实现步骤一、前言 对于运维人员来说,监控是非常重要的,因为如果想要保证线上业务整体能够稳定运行,那么我们则需要实时关注与其相关的各项指标是否正常。 而一个业务…

数据结构-图

1、图的基本概念 (1)定义 图是一种较为复杂的非线性结构。 图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为G(V,E),其中,G表示一个图,V表示顶点的集合,E表示边的集合。 (2&…

当年谷歌为什么退出中国?

《时代》周刊中,百度公司创始人兼CEO李彦宏成为封面人物,成为中国互联网登《时代》的第一人。 而专访中的一段话,却让一段往事再次成为了舆论热议的焦点。专访中,李彦宏表示,谷歌当年退出中国是因为迫于百度给予的市场…

高可用软件什么意思?哪些高可用软件好用?

你知道高可用软件什么意思吗?哪些高可用软件好用?这里我们小编就给大家简单回答一下这两个问题。希望能对大家有用。 高可用软件什么意思? 所谓高可用是指系统无中断地执行其功能的能力;因此高可用软件是指具备处理能力&#xff…

SpringBoot 之自动装配简单使用

什么是自动装配? Spring Boot 自动装配是指 Spring Boot 应用程序在启动时,框架会自动根据应用程序的配置来创建和连接各种对象之间的依赖关系。这意味着,在应用程序中使用的对象可以通过声明它们的依赖关系来自动创建,而不需要人…

Linux中wait()函数

编程过程中&#xff0c;有时需要让一个进程等待另一个进程&#xff0c;最常见的是父进程等待自己的子进程&#xff0c;或者父进程回收自己的子进程资源包括僵尸进程。这里简单介绍一下系统调用函数&#xff1a;wait() 函数原型是#include <sys/types.h>#include <wai…

GPT学习路线分享

初代GPT-3展示了三个重要能力&#xff1a; 语言生成&#xff1a;遵循提示词&#xff08;prompt&#xff09;&#xff0c;然后生成补全提示词的句子。这也是今天人类与语言模型最普遍的交互方式。 上下文学习 (in-context learning): 遵循给定任务的几个示例&#xff0c;然后为…

深入浅出详解进制转换

1.进制转换 1.十进制转其他进制 1.整数转换(短除法) 以十进制数520为例&#xff0c;分别转换为二进制、八进制、十六进制&#xff0c;转换过程如下&#xff1a; 短除法&#xff1a;转进制除以几&#xff0c;余数倒过来为结果 2.小数转换 例如&#xff1a;转换为2进制&#…

Java | 详解创建Web项目、配置Tomcat服务器、实现登录效果

本Demo为本人自学&#xff0c;部分技术已不是前沿技术&#xff0c;望谅解。 目录 一、相关工具及技术 1、相关工具 2、相关技术 3、相关 jar 包 二、IDEA 创建 web 项目 1、创建空项目 2、classes目录和lib目录配置 3、tomcat 服务器配置 三、MySQL 配置 1、登录 mysql 2、创…

Leetcode - 485. 最大连续 1 的个数

与其后悔与抱怨&#xff0c;不如从现在改变 485. 最大连续 1 的个数 - Easy 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续…

原油期货在哪里交易?美原油期货和布伦特原油期货选择哪个交易更好?

石油是与人类社会及经济息息相关的能源&#xff0c;从工业生产、交通运输&#xff0c;以至制造塑胶产品、化妆品及衣服纤维等&#xff0c;无孔不入地渗透我们的日常生活与工商业活动。石油经开采后&#xff0c;未经加工的状态通称为原油&#xff0c;既是不可或缺的能源&#xf…

新茶饮 200+ 门店优化库存成本,需要几个数据分析师?

小 L 是一家茶饮门店的店长&#xff0c;她所在的新茶饮企业已经在全国布局了超过 200 家实体门店。小 L 每周除了整理 Excel 数据向区域总监汇报外&#xff0c;还要抽时间站到柜台前&#xff0c;完成总部要求的“在前线做决策”。虽然忙碌&#xff0c;但还能 Hold 得住&#xf…

云图联动创宇智脑,打造高价值威胁情报赋能的威胁处置闭环与攻击溯源

网络对抗日趋激烈&#xff0c;《关基保护要求》提出更高检测防御要求&#xff0c;高级威胁检测面对需求升级&#xff0c;知道创宇推出创宇云图与创宇威胁情报网关、创宇智脑威胁情报平台联防联控方案&#xff0c;打破单个网络安全产品的孤岛&#xff0c;充分发挥产品联动方案的…