python模块:profile,pstats

profile和pstats是python代码的分析器,可以很客观查看代码的运行质量和使用的资源.在调试程序时有很大的帮助.

1.使用profile分析python的代码

[[email protected] tmp]# vim profile12.py

#!/bin/env python
#!-*- coding:UTF-8 -*-
import profile

def one():                #定义一个one函数

sum=0
    for i in range(10000):
        sum+=i
    return sum

def two():
    sum=0
    for i in range(100000):
        sum+=i
    return sum

def there():
    sum=0
    for i in range(100000):
        sum+=i
    return sum

if __name__=="__main__":
    profile.run("one()","result")      #将结果保存到result文件中

profile.run("two()")
    profile.run("there()")
[[email protected] tmp]# python profile12.py
         5 function calls in 0.010 CPU seconds       
   Ordered by: standard name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.003    0.003    0.003    0.003 :0(range)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        1    0.000    0.000    0.010    0.010 <string>:1(<module>)
        1    0.007    0.007    0.010    0.010 profile12.py:12(two)
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.010    0.010 profile:0(two())
ncalls:函数调用的次数

tottime:函数的总的运行时间,除掉函数中调用子函数的运行时间

percall:(第一个 percall)等于tottime/ncalls

cumtime:函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间

percall:(第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls

filename:lineno(function):每个函数调用的具体信息

5 function calls in 0.008 CPU seconds
   Ordered by: standard name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001    0.001    0.001 :0(range)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        1    0.000    0.000    0.008    0.008 <string>:1(<module>)
        1    0.007    0.007    0.008    0.008 profile12.py:18(there)
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.008    0.008 profile:0(there())

Thu May  5 17:30:09 2016    result
         5 function calls in 0.001 CPU seconds
   Ordered by: standard name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 :0(range)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        1    0.000    0.000    0.001    0.001 <string>:1(<module>)
        1    0.001    0.001    0.001    0.001 profile12.py:6(one)
        1    0.000    0.000    0.001    0.001 profile:0(one())
        0    0.000             0.000          profile:0(profiler)
[[email protected] tmp]#

2.使用pstats分析python代码

[[email protected] tmp]# vim profile12.py

#!/bin/env python
#!-*- coding:UTF-8 -*-

import profile,pstats

def one():
    sum=0
    for i in range(10000):
        sum+=i
    return sum

if __name__=="__main__":
    profile.run("one()","result")                #将结果保存到result文件中

p=pstats.Stats("result")                      #创建一上pstats变量
    p.strip_dirs().sort_stats(-1).print_stats()     #strip_dirs:从所有模块名中去掉无关的路径信息

p.strip_dirs().sort_stats("name").print_stats()  #sort_stats():把打印信息按照标准的module/name/line字符串进行排序

p.strip_dirs().sort_stats("cumulative").print_stats(3)     #print_stats():打印出所有分析信息

[[email protected] tmp]# python profile12.py
Thu May  5 17:54:49 2016    result
         5 function calls in 0.001 CPU seconds
   Ordered by: standard name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 :0(range)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        1    0.000    0.000    0.001    0.001 <string>:1(<module>)
        1    0.001    0.001    0.001    0.001 profile12.py:6(one)
        1    0.000    0.000    0.001    0.001 profile:0(one())
        0    0.000             0.000          profile:0(profiler)

Thu May  5 17:54:49 2016    result
         5 function calls in 0.001 CPU seconds
   Ordered by: function name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.001    0.001 <string>:1(<module>)
        1    0.001    0.001    0.001    0.001 profile12.py:6(one)
        1    0.000    0.000    0.001    0.001 profile:0(one())
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.000    0.000 :0(range)
        1    0.000    0.000    0.000    0.000 :0(setprofile)

Thu May  5 17:54:49 2016    result
         5 function calls in 0.001 CPU seconds
   Ordered by: cumulative time
   List reduced from 6 to 3 due to restriction <3>
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001    0.001    0.001 profile12.py:6(one)
        1    0.000    0.000    0.001    0.001 profile:0(one())
        1    0.000    0.000    0.001    0.001 <string>:1(<module>)
[[email protected] tmp]#

时间: 2024-12-25 01:09:46

python模块:profile,pstats的相关文章

[python]用profile协助程序性能优化

转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanphaday,欢迎转载,但请务必保留原文完整,并保留本声明. [python]用profile协助程序性能优化 上帝说:“选择了脚本,就不要考虑性能.”我是很支持这句话的,使用脚本要的就是开发速度.良好的扩展性以及可维护性.可惜到了最后,我们的程序难免会运行得太慢,我们的客户不能忍受,这时候,我们就不得

python模块导入细节

python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 用于执行的可执行程序文件 不用与执行,仅用于被其它python源码文件导入的模块文件 例如文件a.py和b.py在同一目录下,它们的内容分别是: # b.py x="var x in module b" y=5 # a.py: import b import sys print(b.x)

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

Python模块的交叉引用问题分析

实际项目中遇到python模块相互引用问题,查资料,说是通过import局部导入的方式可以避免错误,资料如附录所述. 但更改后测试还是会出错,很疑惑!? 如果哪位读者有好的解决方法,敬请留言说明,谢谢. 所以,最好的方法是不进行交叉引用,如果需要就单独分一个模块出来. 附录:Python模块的交叉引用问题解读:How can I have modules that mutually import each other? 有下面两个文件相互引用,Python解释器报错. foo.py: from

python模块以及导入出现ImportError: No module named &#39;xxx&#39;问题

python模块以及导入出现ImportError: No module named 'xxx'问题 python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比 如在a.py中使用b.py:  import b 但是如果要import一个不同目录的文件(例如b.py)该怎么做

python模块搜索路径

1.电脑版 (1).python安装目录中\Lib\site-packages\下建立*.pth文件,写入模块路径 (2).添加环境变量:变量名:pythonpath;变量值:模块(文件夹)路径 ,若有多个,用半角分号";"隔开 2.手机版 在resource\site.py文件中添加代码段 import syssys.path.append("模块(文件夹)路径") 发现:第一个参数都是C:\\resource 我的理解: 程序安装盘下的site.py指定模块路径

4.python模块

python 字符串 一.注释 在python中的注释分为单行注释和多行注释    (1)单行注释:为在语句的前边加"#" 例子: #!/usr/bin/env python a = 123 print a #print a #print a #print a 执行结果如下: [[email protected] ~]# python a.py 123  (2)多行注释:可以用3对单引号(比如:''' 注释内容''') 或是3对双引号(比如:"""注释内容

使用 from import方法导入Python模块

比如我们导入一个数学计算的模块 math: >>> import math>>> print math<module 'math' (built-in)>>>>>>> print math.pi #导出圆周率的值3.14159265359>>> 我们导入math模块,在python模块学习中我们会知道,这样做会得到名math的对象,这个模块对象包含了pi这样的常量,以及一些其它的方法. 我们如果直接访问

Python 八、Python模块

一.python文件概述 1.python模块概述 可以将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块 模块在物理形势上表现为以.py结尾的代码文件 一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件 模块的文件名就是模块的名字加上扩展名(.py) 每个模块都有自己的名称空间 python允许导入其它模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统 python中,模块也是对象 在一个模块的顶层定义的所有