全部版块 我的主页
论坛 数据科学与人工智能 人工智能
2567 0
2016-12-02
 By Context Manager
  可以上下文管理器自己实现一个计时器, 通过定义类的 __enter__ 和 __exit__ 方法来实现对管理的函数计时, 类似如:
   1.jpeg

  使用方式如下:
   2.png

  By Decorator
  然而我认为装饰器的方式更加优雅
   3.jpeg

  使用就很简单了:
   4.png

  运行结果:
  系统自带的time命令
  使用示例如下:
   5.png

  上面的结果说明: 执行脚本消耗0.79sCPU时间, 0.18秒执行内核函数消耗的时间,总共0.977s时间。
  其中, total时间 - (user时间 + system时间) = 消耗在输入输出和系统执行其它任务消耗的时间
  python timeit 模块
  可以用来做benchmark, 可以方便的重复一个程序执行的次数,来查看程序可以运行多块。
  cProfile
  直接看带注释的使用示例吧。 

   6.jpeg

7.jpeg

  cProfile将分析的结果保存到result.out文件中,但是以二进制形式存储的,想直接查看的话用提供的 pstats 来查看。
   8.jpeg

  截取一个查看test()调用了哪些函数的输出示例:
   9.jpeg

  profile.Profile
  cProfile还提供了可以自定义的类,可以更精细的分析, 具体看文档。
  格式如: class profile.Profile(timer=None, timeunit=0.0, subcalls=True, builtins=True)
  下面这个例子来自官方文档:
   10.jpeg

  line_profiler
  line_profiler是一个对函数进行逐行性能分析的工具
  示例
   11.jpeg

   12.png

  通过 kernprof 命令来注入分析,运行结果如下:
   13.jpeg

  hits(执行次数) 和 time(耗时) 值高的地方是有比较大优化空间的地方。
  memory_profiler
  类似于”line_profiler“对基于行分析程序内存使用情况的模块。
  同样是上面”lineprofiler“中的代码,运行 python -m memory_profiler profile.py 命令生成结果如下:
   14.jpeg



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群