最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python精確統(tǒng)計函數(shù)執(zhí)行時間的多種方法

 更新時間:2026年01月27日 09:31:36   作者:AI手記叨叨  
在軟件開發(fā)中,我們常常需要了解代碼的執(zhí)行效率,本文將介紹 Python中統(tǒng)計 函數(shù)執(zhí)行時間 的多種方法,及其適用場景和注意事項,需要的朋友可以參考下

一、為什么需要統(tǒng)計函數(shù)執(zhí)行時間

  1. 識別性能瓶頸,優(yōu)化關鍵代碼路徑
  2. 對比不同算法或?qū)崿F(xiàn)的性能差異,量化優(yōu)化效果
  3. 監(jiān)控生產(chǎn)環(huán)境中關鍵功能的性能表現(xiàn)
  4. 建立性能基準,評估代碼改進效果
  5. 診斷偶發(fā)的性能下降問題

二、Python中的時間統(tǒng)計方法

使用 time 模塊

import time

start_time = time.time()  # 記錄開始時間
your_function()          # 執(zhí)行目標函數(shù)
end_time = time.time()   # 記錄結(jié)束時間

execution_time = end_time - start_time
print(f"函數(shù)執(zhí)行時間: {execution_time:.6f}秒")

特點

  • 簡單直接
  • 精度約為毫秒級
  • 受系統(tǒng)時間調(diào)整影響

使用 time.perf_counter()

import time

start = time.perf_counter()  # 高精度計時器
your_function()
end = time.perf_counter()

print(f"函數(shù)執(zhí)行時間: {end - start:.6f}秒")

特點

  • 精度可達納秒級
  • 不受系統(tǒng)時間調(diào)整影響
  • 適合測量短時間間隔

注意
Windows 和 Linux 的底層計時機制不同,time.perf_counter()在不同操作系統(tǒng)上的精度可能略有差異。

使用 timeit 模塊

import timeit

# 測量單次執(zhí)行
time_taken = timeit.timeit('your_function()', 
                          setup='from __main__ import your_function',
                          number=1)
print(f"執(zhí)行時間: {time_taken:.6f}秒")

# 測量多次執(zhí)行求平均
repeat = 1000
total_time = timeit.timeit('your_function()', 
                         setup='from __main__ import your_function',
                         number=repeat)
print(f"平均執(zhí)行時間: {total_time/repeat:.6f}秒")

特點

  • 自動禁用垃圾回收以獲得更穩(wěn)定結(jié)果
  • 適合測量小代碼段的執(zhí)行時間
  • 可以方便地重復多次測量

使用裝飾器(推薦的解決方案)

import time
import functools

def timer(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.perf_counter()
        result = func(*args, **kwargs)
        end_time = time.perf_counter()
        print(f"{func.__name__} 執(zhí)行時間: {end_time - start_time:.6f}秒")
        return result
    return wrapper

@timer
def example_function(n):
    return sum(i*i for i in range(n))

example_function(1000000)

特點

  • 代碼復用性高
  • 非侵入式測量
  • 可以輕松添加或移除計時功能

使用上下文管理器

from contextlib import contextmanager
import time

@contextmanager
def timer_context(name):
    start = time.perf_counter()
    yield
    end = time.perf_counter()
    print(f"{name} 執(zhí)行時間: {end - start:.6f}秒")

with timer_context("復雜計算"):
    # 在這里執(zhí)行需要計時的代碼
    result = sum(i*i for i in range(1000000))

特點

  • 適合測量代碼塊的執(zhí)行時間
  • 不需要封裝函數(shù)
  • 可以嵌套使用

三、高級用法

對于更復雜的性能分析,可以使用 cProfile 模塊:

import cProfile

def your_function():
    # 函數(shù)實現(xiàn)
    pass

# 運行性能分析
profiler = cProfile.Profile()
profiler.enable()
your_function()
profiler.disable()
profiler.print_stats(sort='time')

四、異步函數(shù)計時

異步代碼(async/await)的計時需要特殊處理,可以使用 asyncio 模塊提供的方法。

使用 asyncio 專用計時器

import asyncio

async def task():
    start = asyncio.get_event_loop().time()  # 事件循環(huán)內(nèi)部時鐘
    await asyncio.sleep(1)
    end = asyncio.get_event_loop().time()
    print(f"耗時: {end - start:.2f}秒")  # 準確記錄協(xié)程生命周期

asyncio.run(task())

隔離CPU耗時(適用于混合計算/IO場景)

async def pure_cpu_work():
    start = time.perf_counter()  # 僅測量CPU計算部分
    result = sum(i*i for i in range(10**6))
    end = time.perf_counter()
    print(f"CPU計算耗時: {end - start:.2f}秒")
    return result

async def main():
    await pure_cpu_work()  # 只統(tǒng)計計算時間
    await asyncio.sleep(1)  # IO等待單獨處理

asyncio.run(main())

使用 asyncio.run() 包裝(Python 3.7+)

async def async_task():
    await asyncio.sleep(1)

start = time.perf_counter()
asyncio.run(async_task())  # 包含事件循環(huán)啟動/關閉時間
end = time.perf_counter()
print(f"總耗時: {end - start:.2f}秒")

五、應用建議

精度選擇

  • 對于長時間運行的任務(>1秒),使用 time.time() 足夠
  • 對于短時間測量,使用 time.perf_counter()

多次測量

  • 對于快速函數(shù),執(zhí)行多次求平均值
  • 注意第一次執(zhí)行可能因緩存等因素較慢

環(huán)境控制

  • 關閉其他占用CPU的程序
  • 在相同環(huán)境下進行比較測試

結(jié)果分析

  • 關注相對差異而非絕對數(shù)值
  • 考慮標準差而不僅是平均值

相對差異 vs 絕對數(shù)值

相對差異 = (新值 - 舊值)/舊值 × 100%
絕對數(shù)值 = 直接測量結(jié)果(如 0.25秒)

絕對差異0.05秒看似很小,但相對10%的提升可能是顯著的
不同機器/環(huán)境下絕對數(shù)值會變化,但相對差異通常保持穩(wěn)定
幫助判斷優(yōu)化有效性(如5%以下差異可能是測量誤差)

平均值 vs 標準差

平均值:所有測量結(jié)果的平均數(shù)
標準差(σ):數(shù)據(jù)離散程度的度量

高標準差可能暗示:
存在資源競爭(如GC、線程切換)
特殊輸入導致性能波動
測量環(huán)境不穩(wěn)定

示例:

# 兩組測量結(jié)果(單位:秒)
組A = [0.48, 0.49, 0.50, 0.51, 0.52]  # 平均值0.50,σ≈0.015
組B = [0.35, 0.45, 0.50, 0.55, 0.65]  # 平均值0.50,σ≈0.118
	
# 雖然平均值相同,但:
# - 組A性能穩(wěn)定
# - 組B存在偶發(fā)的嚴重性能下降

在需要穩(wěn)定性的場景(如實時系統(tǒng)),低標準差比低平均值更重要。

六、常見誤區(qū)

  1. 只測量一次:單次測量可能受系統(tǒng)波動影響
  2. 忽略預熱效應:第一次執(zhí)行通常較慢
  3. 測量包含打印時間:I/O操作會顯著影響結(jié)果
  4. 在開發(fā)環(huán)境評估生產(chǎn)性能:環(huán)境差異可能導致結(jié)果不準確

七、總結(jié)

Python 提供了多種統(tǒng)計函數(shù)執(zhí)行時間的方法,從簡單的 time.time() 到專業(yè)的 cProfile 工具。選擇合適的方法取決于具體需求:

  • 快速檢查:使用 time.time() 或裝飾器
  • 精確測量:使用 time.perf_counter()
  • 重復測試:使用 timeit
  • 全面分析:使用 cProfile

通過合理使用這些工具,可以有效地識別和解決性能問題,提升代碼效率。

以上就是Python統(tǒng)計函數(shù)執(zhí)行時間的多種方法的詳細內(nèi)容,更多關于Python統(tǒng)計函數(shù)執(zhí)行時間的資料請關注腳本之家其它相關文章!

相關文章

  • pytorch 梯度NAN異常值的解決方案

    pytorch 梯度NAN異常值的解決方案

    這篇文章主要介紹了pytorch 梯度NAN異常值的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • pytorch動態(tài)神經(jīng)網(wǎng)絡(擬合)實現(xiàn)

    pytorch動態(tài)神經(jīng)網(wǎng)絡(擬合)實現(xiàn)

    這篇文章主要介紹了pytorch動態(tài)神經(jīng)網(wǎng)絡(擬合)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python中進行表單處理的方法詳解

    Python中進行表單處理的方法詳解

    這篇文章主要為大家詳細介紹了Python中進行表單處理的方法,分別是利用Flask和Flask-WTF處理表單,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-12-12
  • 簡單探討一下python線程鎖

    簡單探討一下python線程鎖

    本文主要介紹了簡單探討一下python線程鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • python反轉(zhuǎn)列表的三種方式解析

    python反轉(zhuǎn)列表的三種方式解析

    這篇文章主要介紹了python反轉(zhuǎn)列表的三種方式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python并發(fā)concurrent.futures和asyncio實例

    Python并發(fā)concurrent.futures和asyncio實例

    這篇文章主要介紹了Python并發(fā)concurrent.futures和asyncio實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python描述器descriptor詳解

    Python描述器descriptor詳解

    這篇文章主要向我們詳細介紹了Python描述器descriptor,需要的朋友可以參考下
    2015-02-02
  • Python圖像處理之膨脹與腐蝕的操作

    Python圖像處理之膨脹與腐蝕的操作

    這篇文章主要介紹了Python圖像處理之膨脹與腐蝕的操作,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python實現(xiàn)合并excel表格的方法分析

    Python實現(xiàn)合并excel表格的方法分析

    這篇文章主要介紹了Python實現(xiàn)合并excel表格的方法,結(jié)合實例形式分析了Python合并Excel表格的原理、實現(xiàn)步驟與相關操作技巧,需要的朋友可以參考下
    2019-04-04
  • 如何使用Python抓取網(wǎng)頁tag操作

    如何使用Python抓取網(wǎng)頁tag操作

    這篇文章主要介紹了如何使用Python抓取網(wǎng)頁tag操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論

邓州市| 绥芬河市| 佳木斯市| 页游| 信丰县| 光山县| 利津县| 瑞昌市| 平原县| 阿拉善左旗| 云林县| 时尚| 琼中| 磐安县| 卢氏县| 永善县| 镇雄县| 朔州市| 顺昌县| 甘泉县| 保德县| 高邮市| 乌拉特后旗| 增城市| 康马县| 亚东县| 马鞍山市| 株洲县| 松原市| 贵溪市| 玉树县| 平凉市| 兴海县| 岑巩县| 清新县| 白沙| 广河县| 扶绥县| 达尔| 长宁区| 泗阳县|