电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python性能分析工具py-spy原理用法解析

瀏覽:46日期:2022-07-16 11:47:34

Py-Spy介紹

引用官方的介紹:

Py-Spy是Python程序的抽樣分析器。 它允許您可視化查看Python程序在哪些地方花了更多時(shí)間,整個(gè)監(jiān)控方式無(wú)需重新啟動(dòng)程序或以任何方式修改工程代碼。 Py-Spy的開(kāi)銷(xiāo)非常低:它是用Rust編寫(xiě)的,速度與編譯的Python程序不在同一個(gè)進(jìn)程中運(yùn)行。 這意味著Py-Spy可以安全地用于生成生產(chǎn)環(huán)境中的Python應(yīng)用調(diào)優(yōu)分析。

github:https://github.com/benfred/py-spy

安裝

pip install py-spy

安裝后使用py-spy - h可以驗(yàn)證安裝,并查看使用幫助。

py-spy從命令行工作,并獲取要從中采樣的程序的PID或要運(yùn)行的python程序的命令行。py-spy具有三個(gè)子命令record,top和dump:

record生成火焰圖 top實(shí)時(shí)查看每個(gè)函數(shù)運(yùn)行時(shí)間并統(tǒng)計(jì) dump顯示每個(gè)python線程的當(dāng)前調(diào)用堆棧

Python性能分析工具py-spy原理用法解析

使用py-spy 生成火焰圖

​ py-spy是一個(gè)非常好用而且簡(jiǎn)單的庫(kù),看完他的readme 介紹文檔基本就可以入手使用spy。這個(gè)工具一是可以生成profile 火焰圖,二是可以定位到程序中最耗時(shí)間的代碼的位置。它的優(yōu)點(diǎn)在于完全不用修改代碼,相比較其他的一些性能調(diào)查工具,py-spy這一點(diǎn)非常棒,當(dāng)你debug 一個(gè)線上正在運(yùn)行的程序的時(shí)候,只需要提供進(jìn)程id,py-spy 就可以直接生成火焰圖。

py-spy record -o profile.svg --pid 12345

或者

py-spy record -o profile.svg-python myprogram.py

'12345' 為程序運(yùn)行的pid,當(dāng)運(yùn)行這行命令的時(shí)候,py-spy 開(kāi)始抽樣的程序simlple 并且生成火焰圖,我們可以等待1分鐘左右 ctrl+c 結(jié)束,這時(shí)候會(huì)在運(yùn)行這行命令的當(dāng)前目錄下生成 profile.svg 火焰圖, 如下圖:

Python性能分析工具py-spy原理用法解析

火焰圖的分析非常簡(jiǎn)單直觀,主要是看'平頂',看圖中最下方那個(gè)峰頂是平的,那么程序的性能問(wèn)題就可以從這里入手去解決,這里不詳細(xì)介紹火焰圖看法,不明白的同學(xué)可以自行百度。

​ 通過(guò)生成火焰圖分析程序瓶頸大概率可以找到并解決80%的程序性能問(wèn)題,但是還有一種問(wèn)題,如果我的火焰圖沒(méi)有平頂,但是程序依舊很慢,該如何定位問(wèn)題?

沒(méi)有平頂情況下,定位程序中耗時(shí)最多函數(shù)/代碼

如下圖,通過(guò)火焰圖并沒(méi)有發(fā)現(xiàn)程序中的平頂

Python性能分析工具py-spy原理用法解析

Top功能

這時(shí)候要用到py-spy 提供的 top 命令,Top顯示了在python程序中花費(fèi)最多時(shí)間的功能的實(shí)時(shí)視圖,類(lèi)似于unix top命令。

py-spy top --pid 12345

py-spy top-python myprogram.py

​ 輸入上述命令后,在控制臺(tái)會(huì)顯示程序?qū)崟r(shí)的運(yùn)行狀態(tài),這里可以介紹一下圖中4個(gè)參數(shù)的含義, 然后可以通過(guò)按1,2,3,4 四個(gè)按鍵,讓程序按照下圖所述排序。

按%Own排序(當(dāng)前在該函數(shù)中花費(fèi)的時(shí)間的百分比) 按%Total排序(函數(shù)及其子級(jí)中當(dāng)前的時(shí)間百分比) 按OwnTime排序(函數(shù)中花費(fèi)的總時(shí)間) 按TotalTime排序(該函數(shù)及其子項(xiàng)花費(fèi)的總時(shí)間)

比較直觀的 使用3 , 可以比較直接的看出程序運(yùn)行中,所占比消耗時(shí)間最多的函數(shù),然后從函數(shù)如圖進(jìn)行分析,如下圖,可以看出 是wrap 裝飾器函數(shù)消耗的時(shí)間最長(zhǎng),我們用wrapt 這個(gè)c寫(xiě)的裝飾器進(jìn)行替換后效率有了明顯的提升。

Python性能分析工具py-spy原理用法解析

總結(jié) : 使用py-spy 相對(duì)于其他一些python性能分析工具,優(yōu)勢(shì)在于使用非常簡(jiǎn)單,而且無(wú)須對(duì)代碼做任何改動(dòng),并且可以在保護(hù)現(xiàn)場(chǎng)情況下,直接生成火焰圖,還可查看實(shí)時(shí)程序運(yùn)行狀態(tài)。

火焰圖怎么看

首先你需要知道:

X方向是采樣時(shí)間。

Y方向是函數(shù)調(diào)用棧。

如果給你一個(gè)這樣的火焰圖,你應(yīng)該得出什么信息:

1.a()是開(kāi)始的執(zhí)行函數(shù),但沒(méi)有消耗cpu,在這個(gè)函數(shù)里執(zhí)行了b(),h()。

2.a()的兩個(gè)分支b()和h(),這表明a()里面可能有一個(gè)條件語(yǔ)句,繼續(xù)可以看到b()分支消耗的 CPU 大大高于h()。

3.h()函數(shù)沒(méi)有消耗cpu,cpu全被i()函數(shù)占有。

4.b()函數(shù)這條支路繼續(xù)往上,一直到d(),由d()函數(shù)的子函數(shù)e()消耗一部分cpu,f()下的g()消耗一部分cpu,你會(huì)發(fā)現(xiàn)d()的最右邊往上缺了一塊,這塊就是d()執(zhí)行消耗的cpu。

結(jié)論:

消耗cpu的函數(shù)為e(),g(),d(),i()。

因此,如果要調(diào)查性能問(wèn)題,首先應(yīng)該調(diào)查g(),其次是i()。

Python性能分析工具py-spy原理用法解析

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 创客匠人-让IP变现不走弯路| pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 天津蒸汽/热水锅炉-电锅炉安装维修直销厂家-天津鑫淼暖通设备有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 自动配料系统_称重配料控制系统厂家 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 威客电竞(vk·game)·电子竞技赛事官网 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 广州小程序开发_APP开发公司_分销商城系统定制_小跑科技 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 永嘉县奥阳陶瓷阀门有限公司 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 江苏皓越真空设备有限公司| RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 |