Python程序性能分析实例

it2022-05-07  44

在进行代码评审时,得知资源处理程序运行时间很长,遂考虑对其进行性能分析

资源处理程序分为,读取处理、排序、输出三部分,在300万数量级的输入时,大约需要50分钟。对三部分分别计时,先使用10万输入数据进行测试,运行总时间为75秒,其中读取处理耗时65秒。

接下来计划对读取处理过程中的每一行代码进行时间统计,调研有无相关工具可以帮助进行性能分析。终于在http://blog.jobbole.com/47619/中找到合适的工具,line_profiler

 

1、工具安装:

使用pip install line_profile进行安装,line_profile基于IPython运行,在本地服务器安装后发现,依赖没有能够成功安装,所以再使用pip安装以下包:

enum34backports.shutil_get_terminal_sizepathlib2scandir之后运行通过,完成安装

 

2、运行:

首先在需要统计的函数上添加@profile装饰器,即可在之后对该函数中的每一行代码进行统计。在主函数上增加该装饰器,并通过命令行

kernprof -l -v cleanData.py 运行程序

 

运行后的输出类似于如下:

Timer unit: 1e-06 s   File: primes.py Function: primes at line 2 Total time: 0.00019 s   Line #      Hits         Time  Per Hit   % Time  Line Contents ==============================================================      2                                           @profile      3                                           def primes(n):      4         1            2      2.0      1.1      if n==2:      5                                                   return [2]      6         1            1      1.0      0.5      elif n<2:      7                                                   return []      8         1            4      4.0      2.1      s=range(3,n+1,2)      9         1           10     10.0      5.3      mroot = n ** 0.5     10         1            2      2.0      1.1      half=(n+1)/2-1     11         1            1      1.0      0.5      i=0     12         1            1      1.0      0.5      m=3     13         5            7      1.4      3.7      while m <= mroot:     14         4            4      1.0      2.1          if s[i]:     15         3            4      1.3      2.1              j=(m*m-3)/2     16         3            4      1.3      2.1              s[j]=0     17        31           31      1.0     16.3              while j<half:     18        28           28      1.0     14.7                  s[j]=0     19        28           29      1.0     15.3                  j+=m     20         4            4      1.0      2.1          i=i+1     21         4            4      1.0      2.1          m=2*i+3     22        50           54      1.1     28.4      return [2]+[x for x in s if x]   即可在输出中,看到每一行运行次数,耗时,平均耗时,时间占比数据 时间信息都是以微秒为单位   经过查看输出结果,看以看到oProc.process(text)一句耗时占比为63%应该为需要优化的主要部分。 继续在该函数上添加@profile并进行统计,发现主要耗时在文本的全角转半角,繁体转简体,去除无效符号部分。   3、结论 得到性能瓶颈后,发现程序主要耗时在文本处理部分,之后打算使用c++重写该部分逻辑以优化整体性能。

转载于:https://www.cnblogs.com/ruizhang3/p/6391839.html

相关资源:Python性能分析工具Profile使用实例

最新回复(0)