最近在工作上需要在python中去計算執行時間, 以下整理出幾個方法
1. 使用 time
模組
time
模組提供了基礎的計時功能,是測量簡單程式碼段執行時間的一個常見選擇。
import time
# 記錄開始時間
start_time = time.time()
# 要測量的程式碼
for _ in range(1000000):
pass
# 記錄結束時間
end_time = time.time()
# 計算執行時間
execution_time = end_time - start_time
print(f"執行時間: {execution_time} 秒")
說明
time.time()
返回當前時間的時間戳,單位為秒- 通過計算開始和結束時間的差值,可以獲得程式碼的執行時間
2. 使用 timeit
模組
timeit
模組專門用於計算小段程式碼的執行時間。它提供了更精確的計時功能並且自動執行多次測量來減少隨機誤差。
import timeit
# 定義要測量的程式碼
code_to_test = """
for _ in range(1000000):
pass
"""
# 計算執行時間
execution_time = timeit.timeit(code_to_test, number=1)
print(f"執行時間: {execution_time} 秒")
說明
timeit.timeit()
函數接受要測量的程式碼和執行次數(number
)作為參數。- 該函數會返回執行指定次數後的總時間,通常是以秒為單位。
3. 使用 perf_counter
函數
perf_counter
函數提供了更高精度的計時器,適合用於測量非常短的時間段。
import time
# 記錄開始時間
start_time = time.perf_counter()
# 要測量的程式碼
for _ in range(1000000):
pass
# 記錄結束時間
end_time = time.perf_counter()
# 計算執行時間
execution_time = end_time - start_time
print(f"執行時間: {execution_time} 秒")
說明
time.perf_counter()
提供了高解析度的計時器,用於測量短時間間隔。- 它的返回值比
time.time()
更精確,適合用於需要高精度測量的場景。
4. 使用 contextlib
的 contextmanager
contextlib
模組中的 contextmanager
可以用來創建一個上下文管理器,以方便地測量執行時間。
from contextlib import contextmanager
import time
@contextmanager
def timer():
start_time = time.time()
yield
end_time = time.time()
print(f"執行時間: {end_time - start_time} 秒")
# 使用上下文管理器來測量時間
with timer():
for _ in range(1000000):
pass
說明
- 使用
@contextmanager
裝飾器創建上下文管理器,可以簡化時間測量的代碼。 - 在
yield
之前的代碼是測量的開始點,yield
之後的代碼是測量的結束點。
總結
在 Python 中計算程式碼的執行時間有多種方法。根據需求,可以選擇不同的工具和方法:
time
模組適合基本的時間測量。timeit
模組適合精確測量小段程式碼。perf_counter
提供高精度計時。- 使用
contextlib
的contextmanager
可以使時間測量代碼更為簡潔和可重用。
根據實際需求選擇合適的工具,可以幫助提高程式碼的性能並進行有效的優化。
瀏覽次數: 4