0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python 优化—算出每条语句执行时间

科技绿洲 来源:Python数据科学 作者:Python数据科学 2023-11-03 11:01 次阅读

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.使用

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

图片

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

图片

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

3.阅读报告

line_profiler报告包括几个部分:

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

图片

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2662

    浏览量

    47317
  • 程序
    +关注

    关注

    116

    文章

    3770

    浏览量

    80813
  • 代码
    +关注

    关注

    30

    文章

    4736

    浏览量

    68301
  • python
    +关注

    关注

    55

    文章

    4777

    浏览量

    84421
收藏 人收藏

    评论

    相关推荐

    基于KEIL软件的C语言编程,如何计算一段程序的执行时间呢?

    如题,一段程序执行时间怎样确定,假如是把每条语句执行时间累加,那么每条语句
    发表于 01-18 06:10

    如何计算AURIX微控制器指令执行时间

    对于 AURIX TC38x,在数据表中,最大 CPU 频率为 300MHz,如下所示- 因此,在此频率下,每条指令的执行时间将为:1/300 MHz = 3.33 ns。 这种理解正确吗? 否则,如何计算每条指令的
    发表于 01-23 08:08

    嵌套循环执行时间计算

    假如两层循环都要执行16369次,那么执行时间如何计算呢?当然里面不添加任何操作,里面的执行时间是最短,不过这样的意义不大。如果里面仅仅是一个赋值操作呢?int i =90
    发表于 12-30 15:24

    请问C2000中寻址结构体或者共同体需要的执行时间长吗?

    ].bit.ORDER = i; //其中DCA_L是局部的共同体变量想请问下:这个语句相对于普通变量的赋值语句执行时间要长很多吗?为什么呢?如果我想减少执行时间,能做什么改进?比如
    发表于 06-14 03:04

    如何计算执行时间

    嗨,大家好,有没有方法计算程序或程序的一部分(在两个断点之间)的执行时间?比如秒表之类的?我希望任何人都能帮上忙!抢劫 以上来自于百度翻译 以下为原文Hi all, Is there a way
    发表于 07-29 08:07

    如何使用CYCLECOUNTER快速的测量执行时间

    系统基于该寄存器实现了一个64位的循环周期计数器CYCLECOUNTER,能够精确的测量程序的执行时间,并且可以与C-SPY宏结合,成为开发人员非常有用的一个工具。CYCLECOUNTER的显示在IAR
    发表于 01-08 13:40

    如何在MCU上测量代码执行时间

    期限(deadline)要求。测量部分代码的实际执行时间可以帮助我们找到代码中的时间关键点。本文将展示如何轻松测量和显示基于Cortex-M MCU的代码片段的执行时间。测量执行时间
    发表于 07-16 09:59

    RT1052执行时间

    最近测试了下RT1052 的if判断语句执行时间。变量和0比较,用时在4ms。变量和其他非0数比较,用时8ms左右。这个正常么?各位道友。
    发表于 08-11 09:58

    RTThread Studio该如何查看代码执行时间

    想要查看代码执行时间,RTThread Studio下面应该如何操作?如何适应RTThread Studio查看某一段代码的执行时间
    发表于 09-20 14:30

    MPC5744p如何优化程序执行时间?

    作为 MPC5744p 的新手,我遇到了一个关于如何优化程序执行时间的问题。 这是我的中断服务例程中代码行的图片。 ↓这张图片显示了执行我测试过的代码行之前的定时器值 ↓这张图片显示了执行
    发表于 06-05 12:50

    如何测量ARM Cortex-M MCU代码的执行时间

    期限(deadline)要求。测量部分代码的实际执行时间可以帮助我们找到代码中的时间关键点。 本文将展示如何轻松测量和显示基于Cortex-M MCU的代码片段的执行时间。 测量执行时间
    的头像 发表于 08-26 09:20 3575次阅读
    如何测量ARM Cortex-M MCU代码的<b class='flag-5'>执行时间</b>

    MCU上的代码执行时间

    编写的,而且开发人员常常被迫对代码进行手工优化,可能会回到汇编语言,以满足性能的需求。测量代码部分的实际执行时间可以帮助找到代码中的热点。本文将说明如何可以方便地测量和显示在基于Cortex-M MCU的...
    发表于 10-28 13:36 12次下载
    MCU上的代码<b class='flag-5'>执行时间</b>

    可以节省Python执行时间的四种方式

    今天我想和大家分享 4 个省时的 Python 技巧,可以节省 10~20% 的 Python 执行时间
    的头像 发表于 05-13 17:01 2670次阅读

    使用STM32定时器测量程序执行时间的方法详解

    在单片机的固件开发过程中,有的时候需要评估固件代码的执行性能,会对部分关键程序代码的执行时间进行测量。通常会用到的测量程序执行时间的方法是使用示波器进行测量。一般步骤是借助单片机的某一个GPIO口
    的头像 发表于 01-17 15:11 8092次阅读
    使用STM32定时器测量程序<b class='flag-5'>执行时间</b>的方法详解

    TPT19新特性之最坏情况执行时间的指示

    在TPT 19中,首次有了最坏情况执行时间的早期预警系统——这已经在本地主机上用于测试执行。   基本原则:对每个测试步骤的执行时间进行测量。这使您可以快速轻松地确定哪些测试和哪些条件会影响本地
    的头像 发表于 04-27 10:08 448次阅读
    TPT19新特性之最坏情况<b class='flag-5'>执行时间</b>的指示