亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python計算函數執行時長的方法是什么

發布時間:2023-04-13 15:36:30 來源:億速云 閱讀:140 作者:iii 欄目:編程語言

本篇內容主要講解“python計算函數執行時長的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python計算函數執行時長的方法是什么”吧!

python開發,有時需要做性能分析及性能優化,這時就需要記錄一些耗時函數執行時間問題,然后針對函數邏輯進行優化。

在python3中一般都有哪些方法呢。

1、使用time.time()

這種方法較簡單,但如果想更精確的計算函數的執行時間,會產生精度缺失,沒辦法統計時間極短的函數耗時。

import time
 
 def func():
 time.sleep(1)
 
 t = time.time()
 func()
 print(f'耗時:{time.time() - t:.4f}s')
 
 耗時:1.0050s

2、使用time.perf_counter()

perf_counter是在python3.3新添加的,返回性能計數器的值,返回值是浮點型,統計結果包括睡眠的時間,單個函數的返回值無意義,只有多次運行取差值的結果才是有效的函數執行時間。

import time
 def func():
 print('hello world')
 t = time.perf_counter()
 func()
 print(f'耗時:{time.perf_counter() - t:.8f}s')
 hello world
 耗時:0.00051790s

3、使用timeit.timeit ()

timeit()函數有5個參數:
 stmt 參數是需要執行的語句,默認為 pass
 setup 參數是用來執行初始化代碼或構建環境的語句,默認為 pass
 timer 是計時器,默認是 perf_counter()
 number 是執行次數,默認為一百萬
 globals 用來指定要運行代碼的命名空間,默認為 None 
 import timeit
 def func():
 print('hello world')
 print(f'耗時: {timeit.timeit(stmt=func, number=1)}')
 hello world
 耗時: 0.0007705999999999824

4、使用裝飾器統計

在實際項目代碼中,可以通過裝飾器方便的統計函數運行耗時。使用裝飾器來統計函數執行耗時的好處是對函數的入侵性小,易于編寫和修改。

裝飾器裝飾函數的方案只適用于統計函數的運行耗時,如果有代碼塊耗時統計的需求就不能用了,這種情況下可以使用 with 語句自動管理上下文。

(1)同步函數的統計

import time 
 def coast_time(func):
 def fun(*args, **kwargs):
 t = time.perf_counter()
 result = func(*args, **kwargs)
 print(f'函數:{func.__name__} 耗時:{time.perf_counter() - t:.8f} s')
 return result
 return fun
 @coast_time
 def test():
 print('hello world')
 if __name__ == '__main__':
 test()

(2)異步函數的統計

import asyncio
 import time
 from asyncio.coroutines import iscoroutinefunction
 def coast_time(func):
 def fun(*args, **kwargs):
 t = time.perf_counter()
 result = func(*args, **kwargs)
 print(f'函數:{func.__name__} 耗時:{time.perf_counter() - t:.8f} s')
 return result
 async def func_async(*args, **kwargs):
 t = time.perf_counter()
 result = await func(*args, **kwargs)
 print(f'函數:{func.__name__} 耗時:{time.perf_counter() - t:.8f} s')
 return result
 if iscoroutinefunction(func):
 return func_async
 else:
 return fun
 @coast_time
 def test():
 print('hello test')
 time.sleep(1)
 @coast_time
 async def test_async():
 print('hello test_async')
 await asyncio.sleep(1)
 if __name__ == '__main__':
 test()
 asyncio.get_event_loop().run_until_complete(test_async()) 
 hello test
 函數:test 耗時:1.00230700 s
 hello test_async
 函數:test_async 耗時:1.00572550 s

5、with語句統計

通過實現 enter 和 exit 函數可以在進入和退出上下文時進行一些自定義動作,例如連接或斷開數據庫、打開或 關閉文件、記錄開始或結束時間等,例如:我們用來統計函數塊的執行時間。

with語句不僅可以統計代碼塊的執行時間,也可以統計函數的執行時間,還可以統計多個函數的執行時間之和,相比裝飾器來說對代碼的入侵性比較大,不易于修改,好處是使用起來比較靈活,不用寫過多的重復代碼。

import asyncio
 import time 
 class CoastTime(object):
 def __init__(self):
 self.t = 0
 def __enter__(self):
 self.t = time.perf_counter()
 return self
 def __exit__(self, exc_type, exc_val, exc_tb):
 print(f'耗時:{time.perf_counter() - self.t:.8f} s')
 def test():
 print('hello test')
 with CoastTime():
 time.sleep(1)
 async def test_async():
 print('hello test_async')
 with CoastTime():
 await asyncio.sleep(1)
 if __name__ == '__main__':
 test()
 asyncio.get_event_loop().run_until_complete(test_async())
hello test
耗時:1.00723310 s
hello test_async
耗時:1.00366820 s

到此,相信大家對“python計算函數執行時長的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南华县| 东至县| 澄迈县| 赞皇县| 丹江口市| 星子县| 洛扎县| 秦皇岛市| 海城市| 赤壁市| 通河县| 辽宁省| 乳源| 西林县| 托克逊县| 沂源县| 平江县| 宁夏| 安宁市| 永清县| 武义县| 都昌县| 桓仁| 永吉县| 阿合奇县| 青冈县| 桐柏县| 耿马| 安丘市| 宁津县| 丰镇市| 洛扎县| 闸北区| 萨嘎县| 沽源县| 老河口市| 霍州市| 枣阳市| 渭源县| 佛教| 长春市|