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

在上一章节 [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.mfbz.cn/a/152911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】最长奇偶子数组

文章目录 Tag题目来源解题思路方法一:枚举方法二:一次遍历 其他语言python3 写在最后 Tag 【一次遍历】【枚举】【数组】【2023-11-16】 题目来源 2760. 最长奇偶子数组 解题思路 方法一:枚举 本题有多种方法可以解决,最朴素的…

如何有效防止公司内部的信息泄露?

信息泄露对公司可能带来严重影响,因此采取一系列措施以确保信息安全至关重要。以下是一些建议: 部署综合的防泄密软件: 在公司内部,使用专业的防泄密软件如华企盾DSC系统,涵盖文件加密、U盘管控、桌面行为管理、日志审…

极智AI | Realtime Multi-Person人体姿态估计之OpenPose

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 Realtime Multi-Person人体姿态估计之OpenPose。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq OpenPose 主要是…

qt使用AES加密、解密字符串

一、AES算法 AES (Advanced Encryption Standard) 是一种对称加密算法,是目前被广泛使用的数据加密标准之一。该算法旨在取代DES (Data Encryption Standard) 算法。AES最初由比利时密码学家 Joan Daemen 和 Vincent Rijmen 提出,经过多年的演化、改进和…

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

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

jffs2文件系统(二)

本篇文章讲解一下如何制作jffs2文件系统,以及如何在linux下把jffs2作为根文件系统使用。 文件系统制作 制作工具:mtd_utils,可以自己安装 mkfs.jffs2 -o root-uclibc-jffs2 -r root-uclibc -e 0x10000 -s 0x1000 -n -l -X zlib --pad0x10000…

(珍藏版)Redis经典面试题32道,吊打面试官!

文章目录 Redis最新2023年面试题高级面试题及附答案解析(3)01、请用 Redis 和任意语言实现一段恶意登录保护的代码?02、Pipeline 有什么好处,为什么要用 pipeline?03、Redis 常用管理命令有哪些?04、Redis 持久化数据和缓存怎么做…

避坑指南!!在树莓派4b上安装Pycharm以及无法使用终端的问题解决!!

一、下载Pycharm–linux安装包 这里是踩的第一个坑,一开始我下载的是pycharm2023-linux版本的。后面发现缺少很多东西,安装不成功。后面下载了低版本的Pycharm才可以。我下载的是2020版本的。注意:在下载安装包时,一定要在window…

ECRS工时分析软件:全面提升生产效率和产能管理的利器

在当今高度竞争的商业环境中,企业需要不断提升生产效率和产能管理以保持竞争优势。ECRS工时分析软件作为一款专业的工具,通过自动导出各种表格和图表,全面涵盖了生产过程中的各种分析和改善活动,为企业提供了提升生产效率和产能管…

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件,可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型:XMind提供了多种类型的导图,如鱼骨图、树形图、机构图等,可以满足不同用户的需求。 - 强大的功能和工具&…

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

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

MATLAB 模糊设计器 构建 模糊系统

系列文章目录 文章目录 系列文章目录前言一、创建 FIS 结构二、定义输入变量三、定义输出变量四、定义成员函数五、定义规则库六、设计分析七、存储和修改设计八、导出 FIS总结 前言 本例演示如何使用 Fuzzy Logic Designer 应用程序交互式创建 1 型 Mamdani 模糊推理系统&…

知乎怎么快速涨粉?15个实用方法让你迅速积累粉丝

**一、自我介绍** 大家好,我是知乎上的一个普通用户,我在这篇文章中将会分享一些关于如何涨粉的最实用的方法。我相信,只要你们按照这些方法去做,你们也会像我一样,迅速积累起大量的粉丝。 **二、方法分享** **1. 优…

VB.net WebBrowser网页元素抓取分析方法

在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…

文件包含_常见文件包含情况

文件包含系列 相关函数 分类 实践 包含实现的场景

亲测:你这些网站都不知道,哪来时间去摸鱼?

一些我常用且好用的在线工具 Postcat - 在线API 开发测试工具 postcat.com/ API 开发测试工具 Postcat 是一个强大的开源、免费的、跨平台(Windows、Mac、Linux、Browsers...)的 API 开发测试工具,支持 REST、Websocket 等协议&#xff08…

美联储暂停加息 黄金代理要“笑嘻嘻”?

在11月的议息会议上,美联储再次宣布暂停加息。这是继九月份以后,美联储再次做同样的决定,目前已经实现了2连停。停止加息意味着美元资产的吸引度下降,美元指数将会受压,现货黄金价格因为美元的走弱可能上涨&#xff0c…

前端安全策略保障

文章目录 前言后台管理系统网络安全XSSCSRFSQL注入 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端系列文章 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出…

Ubuntu 安装VMware Tools选项显示灰色,如何安装VMware Tools

只要你的网络没问题,你直接执行这几个命令,重启ubuntu虚拟机即可、 sudo dpkg --configure -a sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop

SpringJDBC模板类JdbcTemplate

Spring JdbcTemplate使用JdbcTemplate完成增删改查环境准备新增修改删除查询一个对象批量添加批量修改和批量删除使用德鲁伊连接池(之前数据源是用我们自己写的) JdbcTemplate JdbcTemplate是Spring提供的一个JDBC模板类,是对JDBC的封装&…
最新文章