Python性能分析,Python可是无所不能的!
当我们开始精通编程语言时,我们不仅希望实现最终目标,而且希望使我们的程序高效。
在这个教程中,我们将学习一些Ipython的命令,这些命令可以帮助我们对Python代码进行时间分析。
注意,在本教程中,我建议使用Anaconda。
1.分析一行代码
要检查一行python代码的执行时间,请使用%timeit。下面是一个简单的例子来了解它的工作原理:
#### magics命令%timeit的简单用法 %timeit [num for num in range(20)]#### 输出 1.08 µs ± 43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
主要注意事项:
- 在要分析的代码行之前使用%timeit
- 它返回代码运行的平均值和标准偏差。在上面的示例中,执行了7次,每次执行对该代码循环100万次(默认行为)。这需要平均1.08微秒和43纳秒的标准偏差。
- 在调用magic命令时,可以自定义运行和循环的数量。示例如下:
#### 在%timeit magic命令中自定义运行和循环数 %timeit -r5 -n100 [num for num in range(20)]1.01 µs ± 5.75 ns per loop (mean ± std. dev. of 5 runs, 100 loops each)
使用命令选项-r和-n,分别表示执行次数和循环次数,我们将时间配置文件操作定制为执行5次和循环100次。
2.分析多行代码
本节向前迈进了一步,并解释了如何分析完整的代码块。通过对%timeit magic命令进行一个小的修改,将单百分比(%)替换为双百分比(%%),就可以分析一个完整的代码块。以下为示例演示,供参考:
#### 使用timeblock%%代码分析 %%timeit -r5 -n1000 for i in range(10):n = i**2m = i**3o = abs(i)#### 输出 10.5 µs ± 226 ns per loop (mean ± std. dev. of 5 runs, 1000 loops each)
可以观察到for循环的平均执行时间为10.5微秒。请注意,命令选项-r和-n分别用于控制执行次数和循环次数。
3.代码块中的每一行代码进行时间分析
到目前为止,我们只在分析一行代码或代码块时查看摘要统计信息。如果我们想评估代码块中每一行代码的性能呢?使用Line_profiler 。
Line_profiler 包可用于对任何函数执行逐行分析。要使用line_profiler软件包,请执行以下步骤:
- 安装—Line_profiler 包可以通过简单的调用pip或conda Install来安装。如果使用的是针对Python的anaconda发行版,建议使用conda安装
#### 安装line_profiler软件包 conda install line_profiler
加载扩展—一旦安装,你可以使用IPython来加载line_profiler:
#### 加载line_profiler的Ipython扩展 %load_ext line_profiler1
时间分析函数—加载后,使用以下语法对任何预定义函数进行时间分析
%lprun -f function_name_only function_call_with_arguments
语法细节:
- 对line_profiler的调用以关键字%lprun开始,后跟命令选项-f
- 命令选项之后是函数名,然后是函数调用
在本练习中,我们将定义一个接受高度(以米为单位)和重量(以磅为单位)列表的函数,并将其分别转换为厘米和千克。
#### 定义函数 def conversion(ht_mtrs, wt_lbs ):ht_cms = [ht*100 for ht in ht_mtrs]wt_kgs = [wt*.4535 for wt in wt_lbs]#### 定义高度和重量列表: ht = [5,5,4,7,6] wt = [108, 120, 110, 98]#### 使用line_profiler分析函数 %lprun -f conversion conversion(ht,wt)--------------------------------------------------------------- #### 输出 Total time: 1.46e-05 sFile: <ipython-input-13-41e195af43a9>Function: conversion at line 2Line # Hits Time Per Hit % Time Line Contents ==============================================================2 1 105.0 105.0 71.9 ht_cms = [ht*100 for ht in ht_mtrs]3 1 41.0 41.0 28.1 wt_kgs = [wt*.4535 for wt in wt_lbs]
输出详细信息:
以14.6微秒为单位(参考第一行输出)
生成的表有6列:
- 第1列(行#)—代码的行号(请注意,第#1行是故意从输出中省略的,因为它只是函数定义语句)
- 第2列(命中)—调用该行的次数
- 第3列(时间)—在代码行上花费的时间单位数(每个时间单位为14.6微秒)
- 第4列(每次命中平均时间)—第3列除以第2列
- 第5列(%Time)—在所花费的总时间中,花在特定代码行上的时间百分比是多少
- 第6列(内容)—代码行的内容
你可以清楚地注意到,高度从米到厘米的转换几乎占了总时间的72%。
结束语
利用每一行代码的执行时间,我们可以部署策略来提高代码的效率。在接下来的3个教程中,我们将分享一些最佳实践来帮助你提高代码的效率。
我希望这篇教程能提供帮助,你能学到一些新东西。
原文链接:https://towardsdatascience.com/did-you-know-you-can-measure-the-execution-time-of-python-codes-14c3b422d438
源码点这获取
Python性能分析,Python可是无所不能的!相关推荐
- python程序分析,用Python编写分析Python程序性能的工具的教程
用Python编写分析Python程序性能的工具的教程 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 用Python编写分析Python程序性能的工具的教程.tx ...
- Python性能分析优化及测试
Python性能分析优化及测试 写在前面 CPU分析工具 简单的time方法以及包装成的修饰器 timeit UNIX的time命令进行简单的计时 cProfile:分析每个函数运行花费的时间 lin ...
- python性能分析(一)——使用timeit给你的程序打个表吧
前言 我们可以通过查看程序核心算法的代码,得知核心算法的渐进上界或者下界,从而大概估计出程序在运行时的效率,但是这并不够直观,也不一定十分靠谱(在整体程序中仍有一些不可忽略的运行细节在估计时被忽略了) ...
- python性能分析工具模块_python——关于Python Profilers性能分析器
1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...
- Python性能分析的学习笔记
1 介绍 在这篇文章中,我们将讲述一下关于python代码的性能分析- 2 资料收藏 Pyinstrument Pyinstrument是我在<涛哥聊python>中看到的一个性能分析工具 ...
- Python 性能分析入门指南
为什么80%的码农都做不了架构师?>>> 在岭南六少博客找到的好东西. 注: 本文的原作者是 Huy Nguyen ,原文地址为 A guide to analyzing Py ...
- Python性能分析利器pyinstrument讲解
一.前言 程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术.最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的: import datetime s ...
- Python性能分析入门——cProfile、可视化、逐行分析、内存分析
文章目录 简介 cProfile PyCharm 可视化 安装 gprof2dot SnakeViz PyCallGraph 逐行分析 内存分析 内存堆分析 其他 遇到的坑 参考文献 简介 通过性能分 ...
- python性能分析与优化
性能分析: 1.种类: 基于事件的性能分析通过收集程序执行过程中的具体事件进行工作,每个调用都会触发,输出数据量大,精度高def profiler(frame, event, arg):print ' ...
- Python性能分析 (Profiling)
此页由Linux Wiki用户 Chenxing于2012年3月21日 (星期三) 07:02的最后更改. 提示:此文已超过 2 年(960 天)未更新,如发现内容过时或有误,欢迎改进:) 性能分析( ...
最新文章
- Java反射,从0开始
- 如何查看ddos 放开的ip
- eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
- P4287-[SHOI2011]双倍回文【PAM】
- xor在PHP是什么意思,?=‘在PHP中是什么意思?
- Linux中zip和tar处理软链接的差异与选择
- wincc安装信息服务器,WinCC 7.4软件不会安装?怎么授权?一文教会你
- ROS中的AGV与ROS_CONTROL学习
- 数字计算机之父——冯·诺依曼
- Qt学习笔记(二十七):QLabel 的常用方法
- 梯度下降法-优化算法-机器学习
- Delphi 2006(DeXter) VS.NET 2005[原创]
- HihoCoder 1245:王胖浩与三角形 三角形边长与面积
- 电量监测程序 c语言,基于单片机的电量检测系统设计方案.doc
- 前端生成PDF 文件教程+在线demo案例
- python求矩阵的秩_【案例】求出矩阵的最简型?——sympy登场
- linux找不到telnet命令,Linux安装telnet
- python中判断生肖和星座哪个准_生肖与星座哪个更准确:星座和属相哪个更准一些?...
- python实践pdf在线阅读_Python机器学习实践指南 PDF高清完整版
- 雷达多普勒频率计算公式_雷达基础知识:雷达分类
热门文章
- 程序设计思维与实践 Month3 模拟
- 深度操作系统 15.7 —— 性能好才是真的好
- 西安交大计算机学院 栾佳锡,史椸-西安交通大学-自动化科学与工程学院
- 帝都某外企裁员,补偿673252.62元 !准备回家躺平了 !
- java经纬度格式转换
- 对上传图片进行处理,大图片压缩补白,小图片适度放大四周补白
- HTML写一首简单的居中唐诗,韩愈写的诗最简单的10篇
- dellr420部署os_Dell R420服务器手动安装centos7系统系列问题
- Pycharm关闭错误提示,关闭“This inspection detects shadowing names defined in outer scopes.”等
- 微信支付成功后服务器宕机了,今天微信出现大面积宕机,可能与支付宝有关?...