python profile 性能分析
背景
自己写了一个小型项目, 写完发现运行一次要好几秒, 瓶颈在哪呢? 有无优化空间?
涉及到的对象比较多, 方法间的嵌套和递归调用也不少, 很难手工打印时间戳去分析耗时. 此时就需要专业工具啦.
cProfile
详见参考 [1].
python sdk 内置的库, 可以统计程序各方法的执行频次与耗时, 还能分别展现是否计入子调用(即嵌套调用)的性能指标.
多线程
好像感知不到其他线程的运行与性能.
普通方法
web应用内的方法
@app.route('/hello', methods=['POST'])
def hello():request_data_json = json.loads(request.data)feature_contrib_res_dict = ExplainServiceWrapper.brief_explain(copy.copy(request_data_json),feature_conf)http_response = make_response(feature_contrib_res_dict, 200)return http_response
现在想分析 ExplainServiceWrapper.brief_explain()
的性能, 比起普通方法, 有几处不便:
- 方法的入参来自 web请求, 本地 mock 方法实参不方便.
- cProfile.run(‘ExplainServiceWrapper.brief_explain’) 无法传参, 也无法得到返回值.
- server_app 线程是永久运行的, 即便
cProfile.run(app.run)
也无法正常返回
解决办法, 使用 werkzeug 工具包提供的 wrapper 类: ProfilerMiddleware. 例子见下:
from werkzeug.middleware.profiler import ProfilerMiddleware
app = Flask(app_name)
app = ProfilerMiddleware(app)
# 其他照旧"""
PATH: '/hello'498099 function calls (490270 primitive calls) in 4.344 secondsOrdered by: internal time, call countncalls tottime percall cumtime percall filename:lineno(function)2 4.057 2.029 4.057 2.029 {method 'recv_into' of '_socket.socket' objects}2 0.085 0.043 0.085 0.043 {method 'connect' of '_socket.socket' objects}1095 0.075 0.000 0.075 0.000 {method 'join' of 'str' objects}2 0.040 0.020 0.062 0.031 D:\ProgrammingFiles\Anaconda3\lib\urllib\parse.py:910(<listcomp>)460304 0.022 0.000 0.022 0.000 {method '__getitem__' of 'dict' objects}2 0.019 0.009 0.019 0.009 {built-in method _socket.getaddrinfo}471 0.012 0.000 0.086 0.000 D:\code_work\if_interpretable_model\feature_utils.py:56(indicator_convert)470 0.007 0.000 0.007 0.000 {built-in method numpy.array}4 0.005 0.001 0.005 0.001 {method 'sendall' of '_socket.socket' objects}1 0.002 0.002 4.341 4.341 D:\code_work\if_interpretable_model\if_explainer\_if_brief_explainer.py:28(_explain)
"""
参考
- python 官方 profile 文档
python profile 性能分析相关推荐
- python脚本性能分析
在进行python开发时需要对python脚本的性能分析,以便对python脚本进行优化,下面使用cProfile和 pstats对python脚本性能分析. cProfile思路 1.使用cProf ...
- python代码性能分析_Python 性能分析入门指南
虽然并非你编写的每个 Python 程序都要求一个严格的性能分析,但是让人放心的是,当问题发生的时候,Python 生态圈有各种各样的工具可以处理这类问题. 分析程序的性能可以归结为回答四个基本问题: ...
- 教你3个python「性能分析」工具,再也不用自己计算函数耗时了
文章目录 引言 1. cProfile:最便捷的性能分析 保存性能数据 查看性能数据 查看耗时最多的子函数 查看特定名称函数的耗时 2. timeit:计算小代码片段的耗时 3. IDE中的性能分析 ...
- Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数
本文翻译自 Chrome DevTools: Show native functions in JS Profile,中文版首发在我的知乎专栏 V8 源码及周边. 在 Chrome DevTools ...
- python 函数性能分析
1 使用profile分析函数性能 示例1, 以profile为例: import profile def profileTest(): Total =1; for i in range(10): T ...
- python代码性能分析_使用memory_profiler对代码进行性能分析会增加执行时间
我正在编写一个简单的应用程序,它将大文本文件拆分为较小的文件,并且我已经编写了2个版本,一个使用列表,另一个使用生成器.我使用memory_profiler模块对这两个版本进行了概要分析,并清楚地显示 ...
- 【python】性能分析工具汇总
在进行程序设计时经常需要对程序各部分内存与时间开销进行分析,以便找出瓶颈提高效率.本文总结了常用的几个性能分析工具,包括内存分析工具memory_profiler ,运算时间分析工具line_prof ...
- Python算法性能分析-时间复杂度
时间复杂度: 算法的运行时间. 什么是大O: 大O用来表示上界的. 数据规模: 在决定使用哪些算法的时候,不是时间复杂越低的越好(因为简化后的时间复杂度忽略了常数项等等),要考虑数据规模,如果数据规模 ...
- python性能分析工具模块_python——关于Python Profilers性能分析器
1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...
最新文章
- 用初次训练的SVM+HOG分类器在负样本原图上检测HardExample
- 「Tensorflow」TensorFlow基本使用步骤——以线性回归为练习
- GET_ROLE_BASED_PAGE_USAGES
- JDBC(九)DatabaseMetaData 数据库元数据
- oracle的标准写法,oracle 表连接特有写法与标准写法
- SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)
- 一个简洁的个人导航页面源码
- NVisionXR_iOS教程五 —— 添加灯光渲染
- Android版本下载以及切换
- Maven中央仓库地址和Nexus 下载地址
- ArcGIS和Fragstats的脚本化调用 ------以ArcPy和命令行的方式
- TS:声明合并de妙处
- Linux 系统结构详解
- Deep Match to Rank Model for Personalized Click-Through Rate Prediction
- excel熵值法计算权重_SPSS主成分分析 | 权重计算amp;极差法标准化超详细教程!(下)...
- 什么是 PCIe 卡?您需要了解的有关PCI Express卡的所有信息
- linux io apic,linux-kernel – IO-APIC级别与PCI-MSI-X之间的差异
- FileReader 文件操作
- async 函数的含义和用法
- Kaggle word2vec NLP 教程 第二部分:词向量
热门文章
- brpc源码学习(六)- brpc server 端整体流程
- 两个傻子的爱情,看后非常感动:QQ情感日志
- 扎好篱笆桩:三大运营商守住网络安全“命门”
- P12-Windows与网络基础-Windows组管理
- Gunicorn 部署flask-socketio项目,项目访问慢的问题
- Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?
- Must use destructuring props assignmenteslint
- 常用Hadoop命令
- 神武4 电脑版天魔里职业玩法攻略(原创)
- 项目支付接入支付宝【沙箱环境】