日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python性能分析工具Profile

系統(tǒng) 1806 0

Python性能分析工具Profile

?

?

            
              代碼優(yōu)化的前提是需要了解性能瓶頸在什么地方,程序運(yùn)行的主要時(shí)間是消耗在哪里,對(duì)于比較復(fù)雜的代碼可以借助一些工具來(lái)定位,python 內(nèi)置了豐富的性能分析工具,如 profile,cProfile 與 hotshot 等。其中 Profiler 是 python 自帶的一組程序,能夠描述程序運(yùn)行時(shí)候的性能,并提供各種統(tǒng)計(jì)幫助用戶定位程序的性能瓶頸。Python 標(biāo)準(zhǔn)模塊提供三種 profilers:cProfile,profile 以及 hotshot。
profile 的使用非常簡(jiǎn)單,只需要在使用之前進(jìn)行 
            
            
              import
            
             即可,也可以在命令行中使用。
          

?

使用Profile

測(cè)試示例:

            
              import
            
            
               profile

            
            
              def
            
            
               a():
    sum 
            
            =
            
               0
    
            
            
              for
            
             i 
            
              in
            
             range(1, 10001
            
              ):
        sum 
            
            +=
            
               i
    
            
            
              return
            
            
               sum


            
            
              def
            
            
               b():
    sum 
            
            =
            
               0
    
            
            
              for
            
             i 
            
              in
            
             range(1, 100
            
              ):
        sum 
            
            +=
            
               a()
    
            
            
              return
            
            
               sum

            
            
              if
            
            
              __name__
            
             == 
            
              "
            
            
              __main__
            
            
              "
            
            
              :
   profile.run(
            
            
              "
            
            
              b()
            
            
              "
            
            )
          

輸出結(jié)果:

            
104 function calls in 0.094 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.094 0.094 :0(exec) 1 0.000 0.000 0.000 0.000 :0(setprofile) 1 0.000 0.000 0.094 0.094 :1( ) 1 0.000 0.000 0.094 0.094 profile:0(b()) 0 0.000 0.000 profile:0(profiler) 99 0.094 0.001 0.094 0.001 test.py:15(a) 1 0.000 0.000 0.094 0.094 test.py:21(b)

            其中輸出每列的具體解釋如下:

●ncalls:表示函數(shù)調(diào)用的次數(shù);

●tottime:表示指定函數(shù)的總的運(yùn)行時(shí)間,除掉函數(shù)中調(diào)用子函數(shù)的運(yùn)行時(shí)間;

●percall:(第一個(gè) percall)等于 tottime/ncalls;

●cumtime:表示該函數(shù)及其所有子函數(shù)的調(diào)用運(yùn)行的時(shí)間,即函數(shù)開始調(diào)用到返回的時(shí)間;

●percall:(第二個(gè) percall)即函數(shù)運(yùn)行一次的平均時(shí)間,等于 cumtime/ncalls;

●filename:lineno(function):每個(gè)函數(shù)調(diào)用的具體信息;

如果需要將輸出以日志的形式保存,只需要在調(diào)用的時(shí)候加入另外一個(gè)參數(shù)。如 profile.run(“profileTest()”,”testprof”)。

          

?

?

命令行

如果我們不想在程序中調(diào)用profile庫(kù)使用,可以在命令行使用命令。

            
              import
            
            
               os


            
            
              def
            
            
               a():
    sum 
            
            =
            
               0
    
            
            
              for
            
             i 
            
              in
            
             range(1, 10001
            
              ):
        sum 
            
            +=
            
               i
    
            
            
              return
            
            
               sum


            
            
              def
            
            
               b():
    sum 
            
            =
            
               0
    
            
            
              for
            
             i 
            
              in
            
             range(1, 100
            
              ):
        sum 
            
            +=
            
               a()
    
            
            
              return
            
            
               sum


            
            
              print
            
             b()
          

?

運(yùn)行命令查看性能分析結(jié)果

python -m cProfile test .py

?

將性能分析結(jié)果保存到result文件

python -m cProfile -o result test .py

?

使用pstats來(lái)格式化顯示結(jié)果

python - c "import pstats; p=pstats.Stats('reslut); p.print_stats()"

?

python - c "import pstats; p=pstats.Stats('result'); p.sort_stats('time').print_stats()

            sort_stats支持一下參數(shù):

calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time

          

?

?

測(cè)試示例:在代碼中直接使用profile與stats

            
              import
            
            
               os

            
            
              def
            
            
               a():
sum 
            
            =
            
               0

            
            
              for
            
             i 
            
              in
            
             range(1, 10001
            
              ):
sum 
            
            +=
            
               i

            
            
              return
            
            
               sum

            
            
              def
            
            
               b():
sum 
            
            =
            
               0

            
            
              for
            
             i 
            
              in
            
             range(1, 100
            
              ):
sum 
            
            +=
            
               a()

            
            
              return
            
            
               sum

            
            
              print
            
            
               b()

            
            
              import
            
            
               cProfile

            
            
              #
            
            
              cProfile.run("b()")
            
            
cProfile.run(
            
              "
            
            
              b()
            
            
              "
            
            , 
            
              "
            
            
              result
            
            
              "
            
            
              )

            
            
              import
            
            
               pstats
pstats.Stats(
            
            
              '
            
            
              result
            
            
              '
            
            ).sort_stats(-1).print_stats()
          

?

refence

https://blog.csdn.net/xiemanR/article/details/69398057

https://www.cnblogs.com/wangjian8888/p/6095772.html

https://blog.csdn.net/kongxx/article/details/52216850

http://ju.outofmemory.cn/entry/46805


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 乳山市| 龙州县| 章丘市| 衡东县| 连云港市| 远安县| 克东县| 铁岭县| 年辖:市辖区| 东城区| 台山市| 布尔津县| 墨脱县| 安宁市| 安丘市| 旌德县| 苏尼特右旗| 钟祥市| 龙里县| 黑山县| 保亭| 沾化县| 通州区| 鸡东县| 应用必备| 时尚| 九台市| 诸城市| 东兰县| 石屏县| 包头市| 兴国县| 莒南县| 盘锦市| 平乡县| 新兴县| 天峨县| 奈曼旗| 冷水江市| 安西县| 沙坪坝区|