[Python学习笔记]Python 性能分析

news2024/11/30 0:34:19

在上一章节 [Python学习笔记]Requests性能优化之Session 中,通过在 Resquests 中使用 session,将 Python 脚本的运行效率提升了 3 倍。但当时对问题的排查主要是基于程序实现逻辑的推断,并没有实质性的证据。

本次使用 Python 的性能分析工具对脚本进行分析,找到优化点。首先介绍两个工具 cProfile 和 snakeviz 对程序性能进行定性分析。

目录

    • 工具介绍
      • 1. cProfile
      • 2. snakeviz
    • 性能分析
      • 运行优化前脚本
      • 运行优化后脚本
    • 参考

工具介绍

1. cProfile

cProfile 是 Python 自带的性能分析模块,不需要额外安装,可以统计程序中函数的调用次数和时间。

python -m cProfile -o log.profile macd_all.py
  • 以上命令会运行 macd_all.py,对每个函数的调用进行统计,并记录到 log.profile 文件中,方便分析。

2. snakeviz

SnakeViz是一个Python模块,用于可视化Python程序的性能分析结果。

安装

pip install snakeviz

分析 cProfile 日志

snakeviz.exe -p 8080 log.profile
  • 以上命令会打开一个 HTTP Server,使用8080 端口,并自动打开本地浏览器。

说明:

  • ncalls:表示函数调用的次数;
  • tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
  • percall:(第一个percall)等于 tottime/ncalls;
  • cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
  • percall:(第二个percall)即函数运行一次的平均时间,等于cumtime/ncalls;
  • filename:lineno(function):每个函数调用的具体信息;

性能分析

运行优化前脚本

python -m cProfile -o log1.profile macd_all_v1.py

snakeviz.exe -p 8080 log1.profile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

看图可以发现耗时最长的函数就是make_request 这个网络请求函数,而在下面明细中可以看见connect of _socket.socket 耗时很长。
初步可以判断,程序大量时间耗费在建立网络连接方面。

运行优化后脚本

python -m cProfile -o log1.profile macd_all_v2.py

snakeviz.exe -p 8080 log2.profile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对比优化前的分析图,可以发现 make_request 这个函数耗时从 107s 降低到了 24.3s , connect of _socket.socket 调用次数从9040次降低到了1次,总耗时从 77.93s 下降到毫秒级别。

从分析图中可以看出当前耗时较长的函数是 'recv_into' of '_socket.socket',共调用 18037次,耗时 21.78s。
recv_info 会从套接字接收数据,并将其存储在给定的缓冲区中。

在《[Python学习笔记]Requests性能优化之Session》章节有提到,这个脚本会查询 9037 张表,共 1779929 条数据;写入 9037 张表,每个表 1 条数据。

脚本中涉及网络方面方面的操作:

  1. 从数据库查询所有股票代码(1次查询)
  2. 向数据库写入测试记录(1次写入)
  3. 根据代码逐个查询交易数据(9037次查询)
  4. 将结果写入数据库(1次写入)

由此可知,程序主要优化点在于减低数据库查询次数,比如说一次查询多只股票的数据。

参考

Python基础(11) 性能测试工具 cProfile
使用 cProfile 和火焰图调优 Python 程序性能
[量化投资-学习笔记013]Python+TDengine从零开始搭建量化分析平台-策略回测进阶
[Python学习笔记]Requests性能优化之Session

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

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

相关文章

使用docker部署nacos分布式集群

本文目的 在服务器中部署nacos集群,并连接外置数据库关于外置的mysql部署和单例nacos如何部署请看下面的两个链接 如何使用docker部署mysql docker部署容器化mysql5.7-CSDN博客 如何使用docker部署nacos 容器化部署Nacos:从环境准备到启动-CSDN博客…

ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION packages field missing or empty

vue执行 pnpm install命令时,报 ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION  packages field missing or empty错,在网上查询了很久,也没有传出来结果,最后发现是pnpm的版本不对引起的。 我先执行的是npm install -g pnpm&…

T13级专家被毕业?!研发大牛被裁带来的警示丨IDCF

2005年加入腾讯,腾讯第一位Web前端专家,T13职级,今年1月仍是腾讯前端最高专家。 在47岁的时候,拥有这样简历的前端大牛黄希彤被腾讯裁员。 黄希彤夫人在小红书上透露:(黄希彤)在鹅厂工作了15年…

csapp attack lab phase4

csapp attack lab phase4 每个gadget由一系列指令字节组成,最后一个字节为0xc3,编码为ret指令。 举个例子: 48 89 c7 是指令 movq %rax, %rdi, 对应的地址是0x400f15 0x3 也就是0x400f18, 是开始的指令位置。 例如: ret编码为0…

为防下架,我把虎*牙舞蹈小姐姐视频批量下载啦~

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 环境使用: Python 3.10 解释器 Pycharm 编辑器 模块使用: requests >>> 数据请求 第三方模块 pip install requests <工具> win R 输入cmd 输入安装命令…

Android——gradle构建知识片-散装版

一、Gradle - Plugins插件库地址 Gradle - Plugins插件库地址https://plugins.gradle.org/ 二、将自己的代码Android Library发布到仓库Bintray、JCenter、JitPack 放弃JitPack&#xff0c;发布Android Library到Bintray、JCenter - 简书Bug&#xff1a;升级到gradle tools …

电压放大器的各项参数是什么意思

电压放大器是一种重要的电子设备&#xff0c;用于将输入信号的电压放大到更高的电压水平。在设计和使用电压放大器时&#xff0c;有一些关键参数需要考虑和了解。以下是西安电压放大器带来的各项参数及其意义的详细解释。 增益&#xff1a;增益是指输出电压与输入电压之间的比例…

Unity骚操作:2D横版探险游戏 Quad面片背景跟随正交摄像机移动而循环Shader图片为背景

来自:自研 10.2D横版探险游戏 Quad面片背景跟随正交摄像机移动而循环Shader图片为背景

如果面试时,问你职业规划怎么答?

对于面试官来说&#xff0c;他真的无心听你讲奋斗规划&#xff0c;问你职业规划&#xff0c;无法是想从你的言语中&#xff0c;分辨出你的稳定性&#xff0c;进取心。 1、稳定性 作为面试官&#xff0c;如果觉得你是人才&#xff0c;打算把你招进来&#xff0c;面试官最担心的…

TSINGSEE青犀智慧机房AI+视频智能监管方案,保障机房设备稳定运转

一、背景与需求分析 随着互联网的高速发展&#xff0c;机房数量及配套环境设备日益增多&#xff0c;其运行状况直接决定着企业组织的运营效率和服务质量。作为企业信息化的核心&#xff0c;机房的安全监测与管理&#xff0c;不仅关系到企业的稳定运转&#xff0c;同时也关系到…

中小企业怎么去挑选ERP系统?

中小企业该怎么去挑选ERP系统&#xff1f;本文将为大家总结了4点&#xff0c;如下&#xff1a; 先来说说中小企业选型ERP系统为什么这么难&#xff1f; 一是现在的厂商太卷了&#xff0c;选择太多&#xff0c;企业很难知道到底哪个是真正好用的。 简单来说&#xff0c;ERP其…

在Sprinng Boot中使用Redis充当缓存

关于我们使用EhCache可以适应很多的应用场景了&#xff0c;但是因为EhCache是进程内的缓存框架&#xff0c;在集群模式下&#xff0c;我们在我们的应用服务器或者云服务器之间的缓存都是独立的。故而在不同的服务器之间的进程会存在缓存不一致的情况&#xff0c;就算我们的EhCa…

Evil靶场

Evil 1.主机发现 使用命令探测存活主机&#xff0c;80.139是kali的地址&#xff0c;所以靶机地址就是80.134 fping -gaq 192.168.80.0/242.端口扫描 开放80&#xff0c;22端口 nmap -Pn -sV -p- -A 192.168.80.1343.信息收集 访问web界面 路径扫描 gobuster dir -u http…

只使用JS怎么给静态页面网站添加站内全局搜索功能?

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 背景 静态页面通常由HTML、CSS 和 JavaScript…

基于单片机的自动变速箱电控系统

**单片机设计介绍&#xff0c; 基于单片机的自动变速箱电控系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的自动变速箱电控系统是一种通过单片机来控制车辆自动变速箱的系统。它借助传感器和单片机的协同工作&am…

配电室中如何安装六氟化硫SF6气体泄漏报警装置?

六氟化硫气体泄漏报警装置安装位置产品的设计、检验、制造均遵循GB16808-2008《可燃气体报警控制器》和GB12358-2006《作业场所环境气体检测报警仪通用技术要求》严格设计。是经过高速CPU数据处理&#xff0c;通过LCD显示出探测器的浓度、状态并输出相应的控制信号。报警控制器…

口袋参谋:如何找竞争小,优势大的蓝海词?

​ 作为淘宝天猫的中小卖家&#xff0c;99.99%的人都知道流量对于店铺的重要性&#xff0c;如果没有流量的话&#xff0c;店铺是肯定没有销量的。 提高流量的方式有很多种&#xff0c;比如优化宝贝图片、标题、关键词等&#xff0c;由于在淘宝天猫上同一宝贝的竞争力太大了…

使用 Java 枚举和自定义数据类型

介绍 在 Java 编程领域&#xff0c;理解并有效利用枚举和自定义数据类型对于编写健壮、可维护且高效的代码至关重要。这篇文章旨在深入研究 Java 枚举和自定义数据类型的概念&#xff0c;提供见解和示例&#xff0c;以增强您的编码技能和知识。 理解 Java 中的枚举 枚举是枚…

Vue 2学习(路由、history 和 hash 模式、)-day014

一、路由简介 路由&#xff08;route&#xff09;就是一组 key-value 的对应关系多个路由&#xff0c;需要经过路由器&#xff08;router&#xff09;的管理 在 Vue 中也有路由&#xff0c;Vue 中的路由主要是通过 vue-rounter 这个插件库来实现&#xff0c;它的作用就是专门用…