一、profile,cProfile

1. python -m cProfile myprogram.py

python -m profile myprog.py
2. 使用import profile模块
import profile
def profileTest():
    ...
if __name__ == "__main__":
    profile.run("profileTest()")

cProfile.run('func()')
3.ipython

%prun  func()

%run -p myprog.py

其中输出每列的具体解释如下:
ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
percall:(第一个 percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;
如果需要将输出以日志的形式保存,只需要在调用的时候加入另外一个参数。如 profile.run("profileTest()","testprof")。

对于 profile 的剖析数据,如果以二进制文件的时候保存结果的时候,可以通过 pstats 模块进行文本报表分析,它支持多种形式的报表输出,是文本界面下一个较为实用的工具。使用非常简单:
import pstats
p = pstats.Stats('testprof')
p.sort_stats("name").print_stats()
其中 sort_stats() 方法能够对剖分数据进行排序, 可以接受多个排序字段,如 sort_stats('name', 'file') 将首先按照函数名称进行排序,然后再按照文件名进行排序。常见的排序字段有 calls( 被调用的次数 ),time(函数内部运行时间),cumulative(运行的总时间)等。此外 pstats 也提供了命令行交互工具,执行 python – m pstats 后可以通过 help 了解更多使用方式。

性能分析的结果以图形的方式呈现,常见的可视化工具有 Gprof2Dot,visualpytune,KCacheGrind 等。

二、timeit

1、import timeit

t=timeit.Timer('...')

t.timeit()

class Timer( [stmt='pass' [, setup='pass' [, timer=<timer function>]]])
stmt参数是字符串形式的一个代码段,这个代码段将被评测运行时间;setup参数用以设置stmt的运行环境;timer可以由用户使用自定义精度的计时函数。
timeit.Timer有三个成员函数,下面简单介绍一下:
timeit( [number=1000000])
timeit()执行一次Timer构造函数中的setup语句之后,就重复执行number次stmt语句,然后返回总计运行消耗的时间。
repeat( [repeat=3 [, number=1000000]])
repeat()函数以number为参数调用timeit函数repeat次,并返回总计运行消耗的时间
print_exc( [file=None])
print_exc()函数用以代替标准的tracback,原因在于print_exc()会输出错行的源代码

2、python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-h] [statement ...]

其中参数的定义如下:
-n N/--number=N
       statement语句执行的次数
-r N/--repeat=N
       重复多少次调用timeit(),默认为3
-s S/--setup=S
       用以设置statement执行环境的语句,默认为”pass”
-t/--time
       计时函数,除了Windows平台外默认使用time.time()函数,
-c/--clock
       计时函数,Windows平台默认使用time.clock()函数
-v/--verbose
       输出更大精度的计时数值
-h/--help
       简单的使用帮助

3、ipython

%timeit ...

%run -t [-N<N>] myprog.py

python profile的更多相关文章

  1. python profile性能分析

    #! /usr/bin/env python # encoding=utf8 import profile def func1(): for i in range(1000): pass def fu ...

  2. Python 性能分析工具简介

    Table of Contents 1. 性能分析和调优工具简介 1.1. Context Manager 1.2. Decorator 1.3. 系统自带的time命令 1.4. python ti ...

  3. [译]学习IPython进行交互式计算和数据可视化(六)

    第五章:高性能并行计算 一个反复被提及的反对使用Python进行高性能数值计算的言论是这种语言是动态解释型的,速度太慢.一种编译型低级语言,如C,能提供比它快几个数量级的运算速度.我们在第三章--使用 ...

  4. SSD(Single Shot MultiBox Detector)的安装配置和运行

    下文图文介绍转自watersink的博文SSD(Single Shot MultiBox Detector)不得不说的那些事. 该方法出自2016年的一篇ECCV的oral paper,SSD: Si ...

  5. 制作voc2007数据格式的数据集

    最近按照博主分享的流程操作,将自己遇到的难题记录下来,附上原博文链接:https://blog.csdn.net/jx232515/article/details/78680724 使用SSD训练自己 ...

  6. Spark配置参数详解

    以下是整理的Spark中的一些配置参数,官方文档请参考Spark Configuration. Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf ...

  7. mingw 搭建Emscripten 环境

    mingw 环境的搭建可以参考网上很多文章,不复杂.但在搭建Emscripten 环境之前需要配置git 和python 和MSbuild.exe 还需要安装camke 默认安装之后应该是添加了 系统 ...

  8. Spark记录-官网学习配置篇(一)

    参考http://spark.apache.org/docs/latest/configuration.html Spark提供三个位置来配置系统: Spark属性控制大多数应用程序参数,可以使用Sp ...

  9. spark-submit配置说明

    <Spark 官方文档>Spark配置 spark-1.6.0 原文地址 Spark配置 Spark有以下三种方式修改配置: Spark properties (Spark属性)可以控制绝 ...

随机推荐

  1. 用DotNetBar设计的 Gradient Buttons 漂亮按钮

       http://www.webdesignerwall.com/demo/css-buttons.html public class GradientButtons : DevComponents ...

  2. [转]C++ DLL远程注入与卸载函数

    代码是别处的 第一个函数是成功的,第二个函数运行发现会将目标程序挂死,也许是目标程序有保护机制 支持Unicode编码. //------------------------------------- ...

  3. Semaphore tryAcquire release 正确的使用方法

    boolean permit = false; try { permit = semaphore.tryAcquire(1, TimeUnit.SECONDS); if (permit) { Syst ...

  4. 【转】C#环形队列

    概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: 1 public class MyQueue< ...

  5. 关于n!mod p

    2016.1.26 让我们来研究一下关于n!在mod p下的性质,当然这里p是质数. 首先n!=a*pe,其中p不可整除a.我们现在来做两件事情,求e和a mod p. 显然,n/p表示[1,n]中p ...

  6. SAMEORIGIN

    http://www.css88.com/archives/5141 Response.AppendHeader("X-Frame-Options", "SAMEORIG ...

  7. listview java.lang.ArrayIndexOutOfBoundsException:

    检测下BaseAdapter  下的getViewTypeCount()方法返回的值与getItemViewType返回的个数是否是相等的!

  8. Activity

    activity的生命周期: 第一个是:点击按钮切换到另一个activity界面. 第二个是:单击物理返回键的时候,是对当前的activity进行销毁动作. Activity的启动方式:直接启动和匿名 ...

  9. openStack镜像制作

    参考链接: https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/OpenStack/page/Creating ...

  10. mac 下 chrome 语言环境 设置

    当然,如果把系统语言更改为英文,Chrome.QQ 等一系列软件会自动变成英文界面,而且没有提供切换语言的设置. 啪了下 Google,找到了方法,直接在终端运行后重启 Chrome 即可更改. 英文 ...