網站首頁 編程語言 正文
我們知道為了提高代碼的運行速度,我們需要對書寫的python代碼進行性能測試,而代碼性能的高低的直接反饋是電腦運行代碼所需要的時間。
這里將介紹四種常用的測試代碼運行速度的方法。
第一種
使用time模塊對代碼的運行時間進行統計,代碼如下:
import time
class Debug:
? ? def mainProgram(self):
? ? ? ? start_time = time.time()
? ? ? ? for i in range(100):
? ? ? ? ? ? print(i)
? ? ? ? end_time = time.time()
? ? ? ? print(f"the running time is: {end_time - start_time} s")
? ? ? ??
if __name__ == "__main__":
? ? main = Debug()
? ? main.mainProgram()
我們采用time 模塊給所要測試的代碼的前后加上時間戳,一個記為start_time,一個記作end_time,最后代碼塊的運行時間為end_time-start_time,單位為s(秒)。
當然在python中還有許多的記錄時間的模塊,這里不做過多討論,均類似于time模塊,實現思路上一致,代碼實現上大同小異。
第二種
使用IPython的Built-in magic commands,%time,代碼如下:
class Debug:
? ? def mainProgram(self):
? ? ? ? %time for i in range(100): print(i)
? ? ? ??
main = Debug()
main.mainProgram()
"""
Wall time: 1.99 ms
"""
這個類定義是可以去掉的,并不會影響最終的結果,%time 后面加上想要計算時間的代碼,然后編譯器就會在運行后自動給出所測試代碼的運行時間,但是經過測試,%time方法測出的時間并不準確,時間波動范圍非常大,這個是很好理解的,因為計算機每時每刻都在處理一些進程,也就是說計算機的運行狀態每時每刻都是不同的,所以在不同的時刻測試同一段代碼的運行時間也會得到不同的結果。
第三種
用IPython的另一個Built-in magic commands,%timeit,使用方法類似于%time,代碼如下:
class Debug:
? ? def mainProgram(self):
? ? ? ? %timeit for i in range(100): print(i)
? ? ? ??
main = Debug()
main.mainProgram()
"""
8.53 ms ± 452 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
"""
我們可以看到得到的結果是:每個循環8.53 ms±452 μs(平均±標準偏差,共運行7次,每個循環100個)%timeit相比于%time,%timeit會多次執行測試代碼,并且會取它們運行時間的平均值,并且還會計算出它們的標準差,因此這種計算方法計算的結果相對于使用%time執行測試代碼一次是比較準確的。
第四種
導入timeit模塊來計算代碼塊的執行時間
import timeit
class Debug:
? ? def mainProgram(self):
? ? ? ? result = timeit.timeit(stmt="for i in range(100): print(i)", number=10)
? ? ? ? print(result)
main = Debug()
main.mainProgram()
"""
0.05363089999991644 s
"""
導入timeit模塊后使用timeit.timeit()來測試想要測試的代碼,并且代碼以string的形式進行輸入,并且需要設定number值,設定測試的該段代碼需要執行的次數,最終我們得到0.05363089999991644,單位是s(秒),與內置魔法方法%timeit方法不同的是雖然也是多次計算,但是最終獲取的時間是n次執行代碼所需的總時間而不是執行一次的時間。
至此,代碼的運行速度測試方法的介紹暫時告一段落。
當然,還有一種進階操作可以用來測試腳本文件的性能,python 腳本性能分析(超鏈接點擊跳轉)。
原文鏈接:https://blog.csdn.net/u011699626/article/details/108591752
相關推薦
- 2022-05-14 一起來學習React元素的創建和渲染_React
- 2022-10-29 Centos8系統配置Redis實現開機自啟
- 2023-03-01 React?useState的錯誤用法避坑詳解_React
- 2024-03-21 Nacos簡介
- 2022-03-07 golan參數校驗Validator_Golang
- 2022-04-05 用css改變input光標的3種方法
- 2022-06-02 Android實現水平帶刻度的進度條_Android
- 2022-04-28 SpringBoot?整合mongoDB并自定義連接池的示例代碼_MongoDB
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支