性能檢測分析方法 - 時間、空間衡量方法 Python 自帶模塊 import time 點擊查看代碼 # 僅僅是示範 time 模塊的用法,此段不能直接運行,運行請看測試項目源碼 import time def measure_runtime(func): time_start = time.ti ...
性能檢測分析方法 - 時間、空間衡量方法
Python 自帶模塊
import time
點擊查看代碼
# 僅僅是示範 time 模塊的用法,此段不能直接運行,運行請看測試項目源碼
import time
def measure_runtime(func):
time_start = time.time()
func()
time_end = time.time()
print(time_end - time_start)
measure_runtime(lambda :out_Sorted_list("插入排序","InsertSort"))
import timeit
點擊查看代碼
# 僅僅是示範 timeit 模塊的用法,此段不能直接運行,運行請看測試項目源碼
# 運行五次插入排序函數得到使用時間
temp = timeit.timeit(lambda : out_Sorted_list("插入排序","InsertSort"),number=5)
print(temp)
第三方模塊
pip install memory_profiler
♠ 能夠監視進程、瞭解記憶體使用等情況
點擊查看代碼
from memory_profiler import profile
@profile
def get_Unordered_list():
A = [2, 3, 1, 4, 2, 6]
print("排序前列表:",A)
return A
get_Unordered_list()
運行後
點擊查看運行結果
Line # Mem usage Increment Occurrences Line Contents
=============================================================
39 34.4 MiB 34.4 MiB 1 @profile
40 def get_Unordered_list():
41 34.4 MiB 0.0 MiB 1 A = [2, 3, 1, 4, 2, 6]
42 34.4 MiB 0.0 MiB 1 print("排序前列表:",A)
43 34.4 MiB 0.0 MiB 1 return A
pip install line_profiler
♣ 代碼行運行時間檢測
點擊查看代碼
from line_profiler import LineProfiler
lp = LineProfiler()
lp_wrap = lp(get_Unordered_list)
lp_wrap()
lp.print_stats()
運行後
點擊查看代碼
排序前列表: [2, 3, 1, 4, 2, 6]
Timer unit: 1e-07 s
Total time: 2.43e-05 s
File: E:/Python_Projects/Test_Env/Test_Project/演算法導論_第三版/Chapter_2_演算法基礎.py
Function: get_Unordered_list at line 40
Line # Hits Time Per Hit % Time Line Contents
==============================================================
40 def get_Unordered_list():
41 1 6.0 6.0 2.5 A = [2, 3, 1, 4, 2, 6]
42 1 217.0 217.0 89.3 print("排序前列表:",A)
43 1 20.0 20.0 8.2 return A
pip install heartrate
♥ 可視化檢測工具
點擊查看代碼
import heartrate
heartrate.trace(browser=True)
def InsertSort(noSortedlist):
"""
插入排序:對於少量元素的排序\n
輸入:輸入一個未排序數組/列表\n
輸出:輸出一個從小到大排序好的數組/列表\n
For example: 手中撲克牌排序
"""
for j in range(1,len(noSortedlist)):
key = noSortedlist[j]
i = j-1
while i >= 0 and noSortedlist[i] > key:
noSortedlist[i+1] = noSortedlist[i]
i = i -1
noSortedlist[i+1] = key
return noSortedlist
import heartrate
heartrate.trace(browser=True)
A = [2, 3, 1, 4, 2, 6]
print(InsertSort(A))
運行後
測試項目源碼
點擊查看項目源碼
""" 演算法基礎 """
# In[]
""" 2.1 插入排序 """
from memory_profiler import profile
# 輸入是一個序列 A =[2,3,1,4,2,6]
def InsertSort(noSortedlist):
"""
插入排序:對於少量元素的排序\n
輸入:輸入一個未排序數組/列表\n
輸出:輸出一個從小到大排序好的數組/列表\n
For example: 手中撲克牌排序
"""
for j in range(1,len(noSortedlist)):
key = noSortedlist[j]
i = j-1
while i >= 0 and noSortedlist[i] > key:
noSortedlist[i+1] = noSortedlist[i]
i = i -1
noSortedlist[i+1] = key
return noSortedlist
@profile
def get_Unordered_list():
A = [2, 3, 1, 4, 2, 6]
print("排序前列表:",A)
return A
def out_Sorted_list(name,methodName):
method = eval(str(methodName))
sorted_list = method(get_Unordered_list())
print(f"使用{name}排序後列表:",sorted_list)
def measure_runtime(func):
time_start = time.time()
func()
time_end = time.time()
print(time_end - time_start)
if __name__ == '__main__':
import timeit
import time
# 衡量插入排序
print(timeit.timeit(lambda : out_Sorted_list("插入排序","InsertSort"),number=5))
measure_runtime(lambda :out_Sorted_list("插入排序","InsertSort"))