虽然Python是一个”慢慢的“语言,但是不代表我们对性能没有任何的追求,在程序运行过程中,如果发现程序运行时间太长或者内存占用过大,免不了需要对程序的执行过程进行一些监测,找到有问题的地方,进行优化。今天来分享一些平时用到的Python性能分析工具

memory_profiler

memory_profiler是监控python进程的神器,只需要在函数加一个装饰器就可以输出每行代码的内存使用情况

安装:

pip install memory_profiler

使用:

import time@profiledef my_func():    a = [1] * (10 ** 6)    b = [2] * (2 * 10 ** 7)    time.sleep(10)    del b    del a    print "+++++++++"if __name__ == '__main__':    my_func()

输出:

$ python -m memory_profiler del3.py+++++++++Filename: del3.pyLine #    Mem usage    Increment   Line Contents================================================  10.293 MiB    0.000 MiB   @profile                            def my_func():  17.934 MiB    7.641 MiB       a = [1] * (10 ** 6) 170.523 MiB  152.590 MiB       b = [2] * (2 * 10 ** 7) 170.527 MiB    0.004 MiB       time.sleep(10)  17.938 MiB -152.590 MiB       del b  10.305 MiB   -7.633 MiB       del a  10.309 MiB    0.004 MiB       print "+++++++++"

内建函数 timeit

import timeitimport timedef my_func():    time.sleep(1)    return sum([1,2,3])result = timeit.timeit(my_func, number=5)print(result)

Jupyter Notebook Magic 命令

在Jupyter Notebook中,可以通过%%timeit魔法命令测试cell中代码的运行时间

%%timeitimport timedef my_func():    time.sleep(1)    return sum([1,2,3])result = timeit.timeit(my_func, number=5)print(result)

计时装饰器

Python 中的装饰器可以在其他函数不需要改动任何代码的情况下增加额外功能,经常用在,插入日志、性能测试、权限校验等场景中。我们可以将计时功能封装成一个装饰器,方便复用。

from functools import wrapsimport timedef timeit(func):    @wraps(func)    def deco():        start = time.time()        res = func()        end = time.time()        delta = end - start        print("Wall time ", delta)        return res    return deco

使用:

@timeitdef my_func():    # do something    time.sleep(3)    pass

输出:

Wall time: 3

line_profiler

如果我们除了想知道代码整体的运行时间之外,还要精确分析每行代码的运行时间,那python的 line_profiler 模块就可以帮到你啦!line_profiler 可以用来测试函数每行代码的响应时间等情况。为了使用方便,可以将line_profiler 相关函数封装在装饰器中进行使用,这样在接口请求时,则会执行此装饰器并打印出结果。

安装:

pip install line_profiler

使用:

from flask import Flask, jsonifyimport timefrom functools import wrapsfrom line_profiler import LineProfiler# 查询接口中每行代码执行的时间def func_line_time(f):    @wraps(f)    def decorator(*args, **kwargs):        func_return = f(*args, **kwargs)        lp = LineProfiler()        lp_wrap = lp(f)        lp_wrap(*args, **kwargs)         lp.print_stats()         return func_return     return decoratorapp = Flask(__name__)@app.route('/line_test') @func_line_time def line_test():     for item in range(5):         time.sleep(1)     for item in xrange(5):         time.sleep(0.5)     return jsonify({'code':200})  if __name__=='__main__': app.run()

输出:

* Running on http://127.0.0.1:5000/Timer unit: 1e-06 sTotal time: 7.50827 sFile: /home/rgc/baidu_eye/carrier/test/flask_line_profiler_test.pyFunction: line_test at line 22Line #      Hits         Time  Per Hit   % Time  Line Contents==============================================================                                          @app.route('/line_test')                                          @func_line_time                                          def line_test():        6         33.0      5.5      0.0      for item in range(5):        5    5005225.0 1001045.0     66.7          time.sleep(1)        6         31.0      5.2      0.0      for item in xrange(5):        5    2502696.0 500539.2     33.3          time.sleep(0.5)        1        282.0    282.0      0.0      return jsonify({'code':200})127.0.0.1 - - [05/Mar/2018 15:58:21] "GET /line_test HTTP/1.1" 200 -

pyheat

相较于上面的代码运行时间测试工具,pyheat 通过matplotlib 的绘制热力图来展现代码的运行时间,显得更为直观

安装:

pip install py-heat

使用方法:

pyheat  --out image_file.png

heartrate

heartrate 也是一个可视化的监测工具,可以像监测心率一样追踪程序运行,通过web页面可视化Python程序的执行过程。

img

左侧数字表示每行代码被触发的次数。长方框表示最近被触发的代码行——方框越长表示触发次数越多,颜色越浅表示最近被触发次数越多。该工具记录的是每行代码执行的次数,

而不是具体执行时间,在性能调试的时候有些鸡肋

安装:

pip install --user heartrate

使用:

import heartratefrom heartrate import trace, filesheartrate.trace(browser=True)trace(files=files.path_contains('my_app', 'my_library'))

python输出程序运行时间_叨叨 Python 性能优化工具相关推荐

  1. python中if的效率_Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  2. 百度App Android启动性能优化-工具篇

    一.前言 启动性能是APP的极为重要的一环,启动阶段出现卡顿.黑屏问题,会影响用户体验,导致用户流失.百度APP在一些比较低端的机器上也有类似启动性能问题,为保留存,需要对启动流程做深入优化.现有的性 ...

  3. Android 性能优化工具

    Android 性能优化工具 这段时间总结了一些常用的性能优化工具,当然这些并没有包含全部的工具,下面稍微对这些工具做个简单的总结: 1.应用codeReview工具 StrictMode 检测应用主 ...

  4. Android 性能优化工具 TraceView 简单使用

    背景 最近产品以及测试大佬反应快搜桌面进入搜索页面跳转较为缓慢,影响体验,为了优化这个问题,特地学习Android 性能优化工具 TraceView的 简单使用,这才有了本文. 正文 如下图打开and ...

  5. Android开发常用工具,编译调试工具,性能优化工具,工具集

    分析具体耗时的Trace view;布局复杂度工具Hierarchy View;应用启动时间;Memory.CPU.Network分析;静态代码检查工具Lint;程序稳定性monkey.adb调试桥. ...

  6. 网站性能优化工具大全

    网站性能优化(WPO)已经成为一个非常重要的话题了,越来越多的互联网公司开始有WPO的职位,而相关技能也是对前端开发工程师的重要技术要求之一.国外大牛Steve Souders在参加WebPerfDa ...

  7. Python 和 C/C++ 拓展程序的性能优化

    背景 在 MegEngine imperative runtime 的早期开发中,我们面临着一些的性能优化问题.除了一些已知需要重构的地方(早期设计时为了开发效率而牺牲性能的妥协),还存在一些未知的性 ...

  8. 文科生自学python要多久_怎么自学python,大概要多久?

    都让开!本人文科生,自学Python 2年半,作为一个曾经完全0基础,啥都不懂纯靠自学学会python的文科生,有一些不成熟的小建议可以分享一下. 首先不要觉着编程难,只要你认识26个英文字母,有一点 ...

  9. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

最新文章

  1. 从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
  2. 百度图床带数据库版本源码支持获取外链
  3. 内的 对象 获取 键值对_前端系列——Object对象数据类型详细剖析
  4. 领域搜索算法java_多起点的局部搜索算法(multi-start local search)解决TSP问题(附Java代码及注释)...
  5. 为什么 jsp 还没有淘汰?
  6. 使用普通asp.net编程方式开发WAP应用的可行性
  7. 计算机学院指导报告,重庆大学计算机学院论文指导讲座圆满结束
  8. 企业架构 | TOGAF内容框架
  9. android 农信易扫app源码,农信易扫 · 全自动 上码教程 · 看云
  10. 《群山唱响》-- 爱的力量
  11. 三步必杀【洛谷P4231】
  12. python和易语言哪个容易胖_碳水化合物和脂肪哪个更容易让身体发胖?
  13. python爬虫携程酒店_携程酒店爬取分享
  14. 通知:台湾虾皮跨境物流成本(藏价)调整
  15. 搜索引擎优化是什么,搜索引擎优化应该怎么学?
  16. discuz 获取所有版块并按父子层级排版
  17. 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(五)
  18. 【读书笔记】《终身成长》——热爱挑战相信努力
  19. 为什么上传文件的表单里要加个属性enctype
  20. C/C++实习工作应该具备那些能力?才能拿更好的工作和薪资!

热门文章

  1. 微博平台StatusNet研究(4):快速安装
  2. laraval如何使用tdd
  3. 网络爬虫--26.Scrapy中下载器中间件Downloader Middlewares的使用
  4. MAC地址和IP地址的关系
  5. 有字符csv文件导入matlab_Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件...
  6. Djang重新整理migrations,解决:Django Table xxx already exist
  7. 以太网,局域网,万维网
  8. xcode左侧不显示工程文件目录,提示NO Filter Results
  9. jj为什么会变大变小_为什么上过太空的种子果实会变大?射线会让生物向大变异吗?...
  10. 信号量进程同步与互斥