Python优化中如何算出每条语句执行时间

Python优化中如何算出每条语句执行时间,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联公司专注于高陵企业网站建设,成都响应式网站建设,商城建设。高陵网站建设公司,为高陵等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

用Python写的程序,确实在性能上会比其他语言差一些,这是因为Python为了最大化开发效率,牺牲了一定的运行效率。开发效率和运行效率往往是鱼与熊掌不可兼得的关系。

不过,程序性能较差有很多原因,并不能全把锅甩到Python身上,我们应该首先从自己的代码上找原因,找原因最快的方法就是算出自己写的语句或函数的执行时间。这时候,很多人都会选择用以下的形式打印出语句的执行时间:

Python优化中如何算出每条语句执行时间


这是一种比较低效的做法,如果你有上万条语句要测试,想用这个方法来找到瓶颈简直是大海捞针。幸好,得益于Python强大的社区功能,我们有很多关于效率的模块可以使用,今天要介绍的是 line_profiler , 它可以算出函数里每条语句的占用时间。

我们将使用上次电影人脸识别中的代码进行讲解:Python 识别电影中的人脸,不过要注意,这篇推送里的函数少传递了几个参数,正确参数请点击该推送下方的阅读原文进行查看哦。

1.准备

Python环境当然是必备的,如果你还没有安装Python,可以看这篇文章:超详细Python安装指南。

打开cmd/terminal输入以下命令安装line_profile:

pip install line_profiler

windows机器如果出现 Microsoft Visual C++ 14.0 is required 这样的错误,请前往微软官网,下载vs2015勾选"适用于visual C++2015的公共工具" 进行安装。

如果出现:ModuleNotFoundError: No module named 'skbuild'的情况,请输入以下命令安装scikit-build:

pip install scikit-build

实在还是安装不上的话,可以下载anaconda,输入以下命令安装:

conda install -c anaconda line_profiler

2.使用

使用方式非常简单,比如原来我们在读取人脸的代码中,主函数是这样的:

Python优化中如何算出每条语句执行时间


我们要测的是read_pic_save_face函数中所有语句的执行时间,只需要这样调用line_profiler:

Python优化中如何算出每条语句执行时间

这样就可以获得该函数所有语句的执行时间报表。当然,它还有许多其他的调用方法,具体可以看line_profiler说明文档: 
https://github.com/rkern/line_profiler

3.阅读报告

line_profiler报告包括几个部分:

Line: 语句位于第几行
Hits: 该行被执行的次数
Time: 该语句运行的总时间
Per Hit: 该语句运行一次的平均耗时
% Time: 该语句占总时间的比重

Python优化中如何算出每条语句执行时间

可以看到,我们的这份代码主要是在face_cascade.detectMultiScale 耗时最久,这是opencv的分类器执行效率问题。知道了是这里的效率问题,优化就有一个目标了。

这一部分的优化,我们可以从硬件方面入手,让OpenCV在GPU上运行算法,这样做性能将远超在CPU上运行的性能,这是绝招。其次就是利用多线程计算(没试过,不确定是否有用,或许下次可以试一下)。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


分享文章:Python优化中如何算出每条语句执行时间
转载来于:http://ybzwz.com/article/jegshs.html