前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python日学壹技:性能分析

Python日学壹技:性能分析

作者头像
数据科学工厂
发布2023-02-27 13:03:03
2850
发布2023-02-27 13:03:03
举报
文章被收录于专栏:数据科学(冷冻工厂)

导读

相信日常使用Python作为生产力的读者,一定会存在想要分析代码中每一行的运行时间与变量占用内存大小的需求,本文主要分析两个模块,用于分析每行代码的内存使用情况和运行时间情况。

内存使用

  • memory-profiler[1]

安装

代码语言:javascript
复制
pip install memory-profiler

使用方法一

  1. 在需要分析的函数上,添加装饰器@profile
代码语言:javascript
复制
@profile
def test1():
 c=0
 for item in xrange(100000):
   c+=1
  print (c)
        
  1. 使用下面的命令运行
代码语言:javascript
复制
python -m memory_profiler memory_profiler_test.py     

使用方法二

代码语言:javascript
复制
 from memory_profiler import profile
 
 @profile(precision=4,stream=open('memory_profiler.log','w+'))
# @profile
def test1():
     c=0
     for item in xrange(100000):
         c+=1
     print c

# 直接运行即可    

结果

代码语言:javascript
复制
Filename: memory_profiler_test.py

Line #    Mem usage    Increment   Line Contents
================================================
     5   21.492 MiB   21.492 MiB   @profile
     6                             def test1():
     7   21.492 MiB    0.000 MiB       c=0
     8   21.492 MiB    0.000 MiB       for item in xrange(100000):
     9   21.492 MiB    0.000 MiB           c+=1
    10   21.492 MiB    0.000 MiB       print c
  • Mem usage: 内存占用情况
  • Increment: 执行该行代码后新增的内存

运行时间

  • line-profiler[2]

安装

代码语言:javascript
复制
pip install line-profiler

使用

  1. 在需要分析的函数上,添加装饰器@profile
代码语言:javascript
复制
@profile
def slow_function(a, b, c):
    ...
  1. 运行
代码语言:javascript
复制
python -m line_profiler script_to_profile.py.lprof

结果

代码语言:javascript
复制
Pystone(1.1) time for 50000 passes = 2.48
This machine benchmarks at 20161.3 pystones/second
Wrote profile results to pystone.py.lprof
Timer unit: 1e-06 s

File: pystone.py
Function: Proc2 at line 149
Total time: 0.606656 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
   149                                           @profile
   150                                           def Proc2(IntParIO):
   151     50000        82003      1.6     13.5      IntLoc = IntParIO + 10
   152     50000        63162      1.3     10.4      while 1:
   153     50000        69065      1.4     11.4          if Char1Glob == 'A':
   154     50000        66354      1.3     10.9              IntLoc = IntLoc - 1
   155     50000        67263      1.3     11.1              IntParIO = IntLoc - IntGlob
   156     50000        65494      1.3     10.8              EnumLoc = Ident1
   157     50000        68001      1.4     11.2          if EnumLoc == Ident1:
   158     50000        63739      1.3     10.5              break
   159     50000        61575      1.2     10.1      return IntParIO
  • 每列含义
代码语言:javascript
复制
> - Line #: The line number in the file.
> - Hits: The number of times that line was executed.
> - Time: The total amount of time spent executing the line in the timer's units. In the header information before the tables, you will see a line "Timer unit:" giving the conversion factor to seconds. It may be different on different systems.
> - Per Hit: The average amount of time spent executing the line once in the timer's units.
> - % Time: The percentage of time spent on that line relative to the total amount of recorded time spent in the function.
> - Line Contents: The actual source code. Note that this is always read from disk when the formatted results are viewed, *not* when the code was executed. If you have edited the file in the meantime, the lines will not match up, and the formatter may not even be able to locate the function for display.

参考资料

[1]

memory-profiler: https://pypi.org/project/memory-profiler/

[2]

line-profiler: https://github.com/rkern/line_profiler

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 内存使用
    • 安装
      • 使用方法一
        • 使用方法二
          • 结果
          • 运行时间
            • 安装
              • 使用
                • 结果
                  • 参考资料
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档