python模块:profile,pst

发布时间:2019-09-07 08:12:42编辑:auto阅读(1636)

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


    1.使用profile分析python的代码

    [root@node1 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()")
    [root@node1 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)
    [root@node1 tmp]#


    2.使用pstats分析python代码

    [root@node1 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():打印出所有分析信息

    [root@node1 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>)
    [root@node1 tmp]#

关键字