好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > python如何做代碼性能分析

python如何做代碼性能分析

熱門標簽:蘇州電銷機器人十大排行榜 悟空智電銷機器人6 遼寧400電話辦理多少錢 溫州旅游地圖標注 荊州云電銷機器人供應商 江蘇房產電銷機器人廠家 幫人做地圖標注收費算詐騙嗎 外呼不封號系統 電信營業廳400電話申請

上一篇文章我們介紹了基準測試,通過基準測試可以發現程序變慢了,那么是因為什么原因導致性能變慢的,需要進一步做代碼性能分析。python同樣提供了性能分析工具。

cProfile

cProfile是python默認的性能分析器,他只測量CPU時間,并不關心內存消耗和其他與內存相關聯的信息。

from time import sleep
import random


def random_list(start, end, length):
    """
    生成隨機列表
    :param start: 隨機開始數
    :param end: 隨機結束數
    :param length: 列表長度
    """
    data_list = []
    for i in range(length):
        data_list.append(random.randint(start, end))
    return data_list


def bubble_sort(arr):
    """
    冒泡排序: 對列表進行排序
    :param arr 列表
    """
    n = len(arr)
    sleep(1)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


if __name__ == '__main__':
    get_data_list = random_list(1, 99, 10)

    import cProfile
    cProfile.run('bubble_sort({})'.format(get_data_list))

繼續使用上一篇文章中的例子,引用cProfile模塊,run()方法參數說明。

run(statement, filename=None, sort=-1)

  • statement: 需要測試的代碼或者函數(函數名)
  • fielname: 結果保存的位置, 默認為stdout
  • sort: 結果排序方法,常用的有cumtime: 累積時間, name: 函數名, line: 行號

為了使結果統計出耗時部分,我們加了sleep,結果如下:

❯ python demo.py
         6 function calls in 1.004 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    1.004    1.004 string>:1(module>)
        1    0.000    0.000    1.004    1.004 demo.py:19(bubble_sort)
        1    0.000    0.000    1.004    1.004 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 {built-in method builtins.len}
        1    1.004    1.004    1.004    1.004 {built-in method time.sleep}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
  • 6 function calls in 1.004 seconds 6個函數調用被監控,耗時1.004秒。
  • ncalls 函數被調用的次數。如果這一列有兩個值,就表示有遞歸調用,第二個值是原生調用次數,第一個值是總調用次數。
  • tottime 函數內部消耗的總時間。(可以幫助優化)
  • percall 是tottime除以ncalls,一個函數每次調用平均消耗時間。
  • cumtime 之前所有子函數消費時間的累計和。
  • filename:lineno(function) 被分析函數所在文件名、行號、函數名。

line_profiler

line_profiler 可以提供有關時間是如何在各行之間分配的信息,直白一點就是給出程序每行的耗時,在無法確定哪行語句最浪費時間,這很有用。

line_profiler是一個第三方模塊,需要安裝。

https://github.com/pyutils/line_profiler

from time import sleep
import random


def random_list(start, end, length):
    """
    生成隨機列表
    :param start: 隨機開始數
    :param end: 隨機結束數
    :param length: 列表長度
    """
    data_list = []
    for i in range(length):
        data_list.append(random.randint(start, end))
    return data_list


@profile
def bubble_sort(arr):
    """
    冒泡排序: 對列表進行排序
    :param arr 列表
    """
    n = len(arr)
    sleep(1)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


if __name__ == '__main__':
    get_data_list = random_list(1, 99, 10)
    bubble_sort(get_data_list)

給需要監控的函數加上@profile 裝飾器。通過kernprof命令運行文件(安裝完line_profiler生成的命令)。

參數說明:

  • -l:以使用函數line_profiler
  • -v:以立即將結果打印到屏幕

運行結果:

kernprof -l -v demo.py
Wrote profile results to demo.py.lprof
Timer unit: 1e-06 s

Total time: 1.00416 s
File: demo.py
Function: bubble_sort at line 18

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    18                                           @profile
    19                                           def bubble_sort(arr):
    20                                               """
    21                                               冒泡排序: 對列表進行排序
    22                                               :param arr 列表
    23                                               """
    24         1          8.0      8.0      0.0      n = len(arr)
    25         1    1004030.0 1004030.0    100.0      sleep(1)
    26        11         15.0      1.4      0.0      for i in range(n):
    27        55         44.0      0.8      0.0          for j in range(0, n - i - 1):
    28        45         41.0      0.9      0.0              if arr[j] > arr[j + 1]:
    29        20         21.0      1.1      0.0                  arr[j], arr[j + 1] = arr[j + 1], arr[j]
    30         1          1.0      1.0      0.0      return arr

輸出非常直觀,分成了6列。

  • Line #:運行的代碼行號。
  • Hits:代碼行運行的次數。
  • Time:代碼行的執行時間,單位為微秒。
  • Per Hit:Time/Hits。
  • % Time:代碼行總執行時間所占的百分比。
  • Line Contents:代碼行的內容。

只需查看% Time列,就可清楚地知道時間都花在了什么地方。

總結

性能測試分析站在項目層面是一個很龐大的話題,以前為測試工程師,關注的是性能工具的使用,以及用戶維度的性能[1];作為開發工程師,每個功能都是由一個個函數/方法組成,我們去分析每個函數/方法,甚至是每行代碼的耗時,才能更好的進行代碼層面的性能優化。

以上就是python如何做代碼性能分析的詳細內容,更多關于python 代碼性能分析的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python一些性能分析的技巧
  • Python性能分析工具py-spy原理用法解析
  • Python內置類型性能分析過程實例
  • Python性能分析工具Profile使用實例
  • cProfile Python性能分析工具使用詳解
  • Python中判斷子串存在的性能比較及分析總結
  • 使用pycallgraph分析python代碼函數調用流程以及框架解析
  • Python爬蟲分析微博熱搜關鍵詞的實現代碼
  • 使用bandit對目標python代碼進行安全函數掃描的案例分析
  • python中delattr刪除對象方法的代碼分析
  • python3中確保枚舉值代碼分析

標簽:三沙 喀什 濟南 黃山 欽州 宿遷 臺灣 景德鎮

巨人網絡通訊聲明:本文標題《python如何做代碼性能分析》,本文關鍵詞  python,如何,做,代碼,性能,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python如何做代碼性能分析》相關的同類信息!
  • 本頁收集關于python如何做代碼性能分析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产精品自拍电影| 亚洲综合在线偷拍欧美| 国产AV一码二码在线播放| 中文字幕无码一区二区三区免费 | 《女生日记》在线观看| 国产情侣露脸| japonensisjava美国| 美国色情三级欧美三级| 久久久久久精品无码中文字幕| 亚洲午夜无码毛片Av久久京东热| 蜜桃成熟时在线| 男女婬乱一级A片| 免费看特黄特黄欧美大片| 撕开??吸奶头??进屁| 欧美精品一区高清电影| 陪读麻麻下面好紧| 亚洲国产精品第一区二区| 港片的a| 牛牛影视一区二区三区免费看| 果冻传媒婬片AAAA片小说直播| 日本免费不卡一区二区| 在线看片福利| 精品无人无码乱码毛片国产| 国精产品一区一区二区三区mba| helenmccrory三级| 蜜臀久久精品久久久久酒店| 久久久无码AV精品亚洲网站红粉| 人人澡人人添| 校花被扒衣吸乳漫画| 狂虐性器残忍蹂躏视频| 91碰碰视频| 日韩美女把尿口扒开让男人桶 | 农村三p乱肉小说| 五月激情婷婷综合| 456在线观看亚洲精品| 久久午夜无码精品传媒有限公司| 香蕉茄子视频| 日本h片无遮挡在线观看| bl爽~闷哼~顶弄~深bl| 97视频免费观看| 嗯灬啊灬老师别揉我奶了真人|