笔记-Python-cProfile

1. 简介
python官方提供了cProfile和profile对程序进行性能分析,建议使用cProfile;
cProfile:基于lsprof的用C语言实现的扩展应用,运行开销比较合理,适合分析运行时间较长的程序,推荐使用这个模块; 
profile:纯Python实现的性能分析模块,接口和cProfile一致。但在分析程序时增加了很大的运行开销。不过,如果你想扩展profiler的功能,可以通过继承这个模块实现; 
引用于python3.6.5官方文档-标准库-27.4

2. cProfile使用
2.1. 模块简介

profile.run(command,filename = None,sort = -1 )
该函数执行并从执行中收集分析统计数据。如果没有给出文件名,则该函数创建一个Stats 实例并打印一个简单的性能分析报告。如果指定了排序方式,此Stats实例以指定方式排序。
常用参数:
# 直接把分析结果打印到控制台
cProfile.run("test()")
# 把分析结果保存到文件中
cProfile.run("test()", filename="result.out")
# 指定排序方式
cProfile.run("test()", filename="result.out", sort="cumulative")

import cProfile
import re
cProfile.run('re.compile("foo|bar")')
结果
126 function calls in 0.000 seconds #126个调用,数字指原始调用,不包括递归;
Ordered by: standard name #
#调用数量,时间开销(不包括子函数),
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
4 0.000 0.000 0.000 0.000 enum.py:265(__call__)
4 0.000 0.000 0.000 0.000 enum.py:515(__new__)
2 0.000 0.000 0.000 0.000 enum.py:801(__and__)
1 0.000 0.000 0.000 0.000 re.py:231(compile)
1 0.000 0.000 0.000 0.000 re.py:286(_compile)
1 0.000 0.000 0.000 0.000
…仅罗列部分

class profile.Profile(timer = None,timeunit = 0.0,subcalls = True,builtins = True )
这个类通常只在需要比cProfile.run()函数提供更精确的分析控制时才使用。
使用案例:
import cProfile, pstats, io
pr = cProfile.Profile()
pr.enable()
# ... do something ...
pr.disable()
s = io.StringIO()
sortby = 'cumulative'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())
函数释义:
enable()开始收集分析数据。
disable()停止收集分析数据。
create_stats()停止收集性能数据并创建stats对象。
print_stats(sort = -1 )创建一个Stats对象并将结果输出到stdout。
dump_stats(filename)将当前分析的结果写入文件(二进制格式)。
runcall(func, *args, **kwargs): 收集被调用函数func的性能分析数据Stats类
pstats模块提供的Stats类可以帮助我们读取和操作stats文件(二进制格式)

3. 关于Stats类
Stats类源自pstats模块,使用前import pstats
主要用于格式化展示cprofile的分析结果;

Stats类可以接受stats文件名,也可以直接接受cProfile.Profile对象作为数据源。
strip_dirs(): 删除报告中所有函数文件名的路径信息
dump_stats(filename): 把stats中的分析数据写入文件(效果同cProfile.Profile.dump_stats())
sort_stats(*keys): 对报告列表进行排序,函数会依次按照传入的参数排序,关键词包括calls, cumtime等,具体参数参见官方文档;
reverse_order(): 逆反当前的排序
print_stats(*restrictions): 把信息打印到标准输出。*restrictions用于控制打印结果的形式, 例如(10, 1.0, ".*.py.*")表示打印所有py文件的信息的前10行结果。

笔记-Python-cProfile的更多相关文章

  1. 笔记-python操作mysql

    笔记-python操作mysql 1.      开始 1.1.    环境准备-mysql create database db_python; use db_python; create tabl ...

  2. 笔记-python异常信息输出

    笔记-python异常信息输出 1.      异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...

  3. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  4. 笔记-python lib-pymongo

    笔记-python lib-pymongo 1.      开始 pymongo是python版的连接库,最新版为3.7.2. 文档地址:https://pypi.org/project/pymong ...

  5. 笔记-python tutorial-9.classes

    笔记-python tutorial-9.classes 1.      Classes 1.1.    scopes and namespaces namespace: A namespace is ...

  6. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  7. 机器学习实战笔记(Python实现)-08-线性回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  8. 机器学习实战笔记(Python实现)-05-支持向量机(SVM)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  9. 机器学习实战笔记(Python实现)-04-Logistic回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  10. 机器学习实战笔记(Python实现)-03-朴素贝叶斯

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

随机推荐

  1. SpringBoot的核心功能

    1.独立运行的Spring项目 SpringBoot可以以jar包的形式独立运行,运行一个SpringBoot项目只需要通过java -jar xx.jar来启动. 2.内嵌Servlet容器 Spr ...

  2. C#添加删除防火墙例外(程序、端口)

    一. 添加 COM 引用 在引用里,选择 COM 页, 找到 NetFwTypeLib , 确定即可 二. 添加允许通过防火墙的例外程序 using System; using System.Coll ...

  3. 第2章 核心C#

    1. 变量 1.1 变量需要遵循的规则: 变量必须初始化 初始化器不能为空 初始化器必须放在表达式中 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象 1.2 变量的作用域 只要类在某个 ...

  4. ASP.NET MVC网站学习问题积累(一)

    最近工作压力比较大,不得已开始自学C#.同时网站开发业务开展迫在眉睫,只能先从ASP.NET学起.回想一下,连C#和ASP.NET的关系都没有明白,就被赶鸭子上架了...我觉得这将是我工作以来最具有戏 ...

  5. LeetCode Excel Sheet Column Number 表列数

    题意:天啊!我竟然看不懂题意,还去翻别人的代码才懂!给定一个字符串,求该字符串二十六进制的总值. 思路:'A'~'Z'就是1到26,"AA"=26+1=27,"BA&qu ...

  6. TP5.0:的安装与配置

    在网址中输入:localhost/安装TP5的文件夹/public/ 入口文件位置:public/index.php: 最新版本中,新建的文件夹是没有模型和视图的,需要自行添加没有的文件: 添加前: ...

  7. linux 命令——56 netstat(转)

    netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP ...

  8. java之接口相关知识

    1.接口用interface来声明 //定义一个动物接口 public interface Animal{ public void eat(); public void travel(); } 2.接 ...

  9. kubernetes-ingress(十)

    ingress https://kubernetes.io/docs/concepts/services-networking/ingress/ pod与ingress的关系 •通过label-sel ...

  10. Java时间为什么从1970-01-01 00:00:00 000开始

    不仅仅是Java,几乎所有的语言的时间都是从这一刻开始算起的. 原因:java起源于UNIX系统,而UNIX认为1970年1月1日0点是时间纪元. 最初计算机操作系统是32位,而时间也是用32位表示. ...