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

Python使用異步編程提升程序性能詳解

 更新時間:2025年04月05日 09:52:48   作者:真智AI  
這篇文章主要介紹了Python使用異步編程提升程序性能,異步編程是一種強大的技術(shù),可以顯著提升應用程序的性能,它允許你在不需要手動管理線程或進程的情況下,同時執(zhí)行多個任務,需要的朋友可以參考下

異步編程-提升應用性能的強大技術(shù)

異步編程是一種強大的技術(shù),可以顯著提升應用程序的性能。它允許你在不需要手動管理線程或進程的情況下,同時執(zhí)行多個任務。這種方法特別適用于需要進行 API 請求、文件讀取或數(shù)據(jù)庫交互的開發(fā)者,而且不會暫停整個應用程序的運行。

在 Python 中,最知名的異步編程庫是 asyncio。這個庫通過實現(xiàn)事件循環(huán)(Event Loop)、協(xié)程(Coroutines)和非阻塞 I/O(Non-blocking I/O)來管理程序的執(zhí)行。如果你希望構(gòu)建高響應性和高可擴展性的應用程序,強烈建議你深入研究這個庫。

同步vs異步編程

在同步編程中,任務是按順序執(zhí)行的,意味著每個任務必須在前一個任務完成后才能開始。如下圖所示,程序會等待一個任務執(zhí)行完畢后再進行下一個任務。

(同步執(zhí)行示意圖)

相反,異步編程允許多個任務同時運行。當一個任務在等待某個慢操作(如從服務器獲取數(shù)據(jù))時,程序可以繼續(xù)執(zhí)行其他任務。這種**“非阻塞”**方法避免了程序停滯,使可用資源得到更好的利用,從而顯著提高執(zhí)行效率。下圖展示了異步編程的工作方式。

(異步執(zhí)行示意圖)

什么是asyncio

asyncio 提供了一個框架,使開發(fā)者可以使用 asyncawait 語法編寫異步代碼。它允許程序在不停止其他進程的情況下執(zhí)行網(wǎng)絡請求、文件訪問等操作。這樣,程序可以在等待某些任務完成時仍然保持響應性。

值得注意的是,asyncio 從 Python 3.3 版本起就默認包含,無需額外安裝。

asyncio的核心組件

  • 事件循環(huán)(Event Loop):管理和調(diào)度異步任務和協(xié)程的核心機制。
  • 協(xié)程(Coroutines):使用 async def 定義的特殊函數(shù),它們可以使用 await 關(guān)鍵字暫停執(zhí)行,以便讓其他任務運行。
  • 任務(Tasks):已被調(diào)度到事件循環(huán)中的協(xié)程,可使用 asyncio.create_task() 創(chuàng)建任務。
  • Future 對象(Futures):表示可能尚未完成的操作的結(jié)果,相當于未來可用的占位符。

asyncio的基本用法

import asyncio
async def calculate_square(number):
    print(f"開始計算 {number} 的平方")
    await asyncio.sleep(1)  # 模擬延遲
    print(f"{number} 的平方計算完成")
    return number ** 2
async def calculate_cube(number):
    print(f"開始計算 {number} 的立方")
    await asyncio.sleep(2)  # 模擬延遲
    print(f"{number} 的立方計算完成")
    return number ** 3
async def main():
    # 創(chuàng)建任務并調(diào)度到事件循環(huán)中
    task1 = asyncio.create_task(calculate_square(5))  
    task2 = asyncio.create_task(calculate_cube(3))   
    # 等待任務完成
    result1 = await task1
    result2 = await task2
    # 輸出結(jié)果
    print(f"平方結(jié)果:{result1}")  
    print(f"立方結(jié)果:{result2}")   
if __name__ == "__main__":
    # 啟動事件循環(huán)
    asyncio.run(main())

關(guān)鍵點解析

  • 事件循環(huán):asyncio.run(main()) 啟動事件循環(huán),并運行 main() 協(xié)程。
  • 協(xié)程:calculate_square(number)calculate_cube(number) 是協(xié)程,它們使用 await asyncio.sleep() 模擬延遲,而不會阻塞整個程序。
  • 任務:在 main() 中,我們使用 asyncio.create_task() 創(chuàng)建任務,讓兩個協(xié)程并行運行。
  • Future 對象:result1result2 是 Future 對象,代表 calculate_square()calculate_cube() 任務的最終結(jié)果。

運行結(jié)果

開始計算 5 的平方
開始計算 3 的立方
5 的平方計算完成
3 的立方計算完成
平方結(jié)果:25
立方結(jié)果:27

運行多個協(xié)程asyncio.gather()

asyncio.gather() 允許多個協(xié)程并行執(zhí)行,通常用于批量發(fā)送網(wǎng)絡請求。讓我們用一個示例來模擬多個 HTTP 請求的并發(fā)執(zhí)行。

示例代碼

import asyncio
# 模擬從 URL 獲取數(shù)據(jù)的任務
async def fetch_data(URL, delay):
    print(f"開始從 {URL} 獲取數(shù)據(jù)")
    await asyncio.sleep(delay)  # 模擬網(wǎng)絡延遲
    return f"從 {URL} 獲取數(shù)據(jù)完成(耗時 {delay} 秒)"
async def main():
    # 并行執(zhí)行多個獲取數(shù)據(jù)的任務
    results = await asyncio.gather(
        fetch_data("https://openai.com", 2),  
        fetch_data("https://github.com", 5),  
        fetch_data("https://python.org", 7)   
    )
    # 輸出所有任務的結(jié)果
    for result in results:
        print(result)
asyncio.run(main())

關(guān)鍵點解析

  • fetch_data(URL, delay) 模擬從 URL 獲取數(shù)據(jù),并設置不同的延遲時間。
  • asyncio.gather() 讓三個 fetch_data() 協(xié)程并行執(zhí)行,而不會一個完成后再啟動下一個。
  • 任務并行運行,因此程序不會等待一個任務完成后才開始下一個,極大提升效率。

運行結(jié)果

開始從 https://openai.com 獲取數(shù)據(jù)
開始從 https://github.com 獲取數(shù)據(jù)
開始從 https://python.org 獲取數(shù)據(jù)
從 https://openai.com 獲取數(shù)據(jù)完成(耗時 2 秒)
從 https://github.com 獲取數(shù)據(jù)完成(耗時 5 秒)
從 https://python.org 獲取數(shù)據(jù)完成(耗時 7 秒)

處理超時asyncio.wait_for()

asyncio.wait_for() 允許你為異步任務設置超時時間,如果任務超時未完成,將引發(fā) asyncio.TimeoutError

示例代碼

import asyncio
async def fetch_data():
    await asyncio.sleep(15)  # 模擬網(wǎng)絡延遲
    return "數(shù)據(jù)獲取成功"
async def main():
    try:
        # 設置超時時間為 10 秒
        result = await asyncio.wait_for(fetch_data(), timeout=10) 
        print(result)
    except asyncio.TimeoutError:
        print("數(shù)據(jù)獲取超時")
asyncio.run(main())

如果 fetch_data() 任務執(zhí)行超過 10 秒,就會觸發(fā)超時異常 TimeoutError

總結(jié)

本指南介紹了 Python 的 asyncio 庫,并對同步與異步編程區(qū)別、核心組件和代碼示例進行了詳細講解。雖然編寫異步代碼可能會讓初學者感到困惑,但一旦熟練掌握,你會發(fā)現(xiàn)它能極大提升程序的性能和響應速度。

如果你想深入了解 asyncio,建議查閱官方文檔。

以上就是Python使用異步編程提升程序性能詳解的詳細內(nèi)容,更多關(guān)于Python異步編程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python小游戲?qū)崿F(xiàn)實例之接蘋果

    Python小游戲?qū)崿F(xiàn)實例之接蘋果

    其實利用Python編寫的小游戲很簡單,下面這篇文章主要給大家介紹了關(guān)于Python小游戲?qū)崿F(xiàn)實例之接蘋果的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 一篇文章帶你詳細了解python中一些好用的庫

    一篇文章帶你詳細了解python中一些好用的庫

    這篇文章主要推薦了一些好用的Python庫,都有這不錯的群眾基礎,非常好用,也都很實用,推薦給大家,希望能夠給你帶來幫助
    2021-09-09
  • Python基于Logistic回歸建模計算某銀行在降低貸款拖欠率的數(shù)據(jù)示例

    Python基于Logistic回歸建模計算某銀行在降低貸款拖欠率的數(shù)據(jù)示例

    這篇文章主要介紹了Python基于Logistic回歸建模計算某銀行在降低貸款拖欠率的數(shù)據(jù),結(jié)合實例形式分析了Python基于邏輯回歸模型的數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python隨機數(shù)種子(random seed)的設置小結(jié)

    Python隨機數(shù)種子(random seed)的設置小結(jié)

    隨機數(shù)種子是控制偽隨機數(shù)生成器的初始值,通過設置相同的種子,可以確保隨機數(shù)序列的一致性,本文主要介紹了Python隨機數(shù)種子(random seed)的設置,感興趣的可以了解一下
    2025-03-03
  • 解決anaconda安裝pytorch報錯找不到包的問題

    解決anaconda安裝pytorch報錯找不到包的問題

    這篇文章主要介紹了解決anaconda安裝pytorch報錯找不到包的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • python使用urllib模塊開發(fā)的多線程豆瓣小站mp3下載器

    python使用urllib模塊開發(fā)的多線程豆瓣小站mp3下載器

    對豆瓣音樂小站頁面html分析出所有mp3(正則匹配)文件url,然后用urllib.urlretrieve中方法直接將文件下載到本地,通過多線程技術(shù)下載
    2014-01-01
  • python實現(xiàn)機器學習之元線性回歸

    python實現(xiàn)機器學習之元線性回歸

    這篇文章主要為大家詳細介紹了python實現(xiàn)機器學習之元線性回歸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python使用技巧-文件讀寫

    python使用技巧-文件讀寫

    這篇文章主要介紹了python使用技巧-文件讀寫,Python提供了非常方便的文件讀寫功能,其中open是讀寫文件的第一步,通過open讀寫文件的方式和把大象裝冰箱是一樣的,下面我們就來具體介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • pandas中按行或列的值對數(shù)據(jù)排序的實現(xiàn)

    pandas中按行或列的值對數(shù)據(jù)排序的實現(xiàn)

    本文主要介紹了pandas中按行或列的值對數(shù)據(jù)排序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python 并行化執(zhí)行詳細解析

    Python 并行化執(zhí)行詳細解析

    這篇文章主要介紹了Python 并行化執(zhí)行詳細解析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-07-07

最新評論

江安县| 突泉县| 海盐县| 内乡县| 盐津县| 天等县| 隆林| 海宁市| 抚州市| 永善县| 平罗县| 宁河县| 博白县| 江北区| 荔波县| 偃师市| 长白| 平江县| 和林格尔县| 百色市| 深水埗区| 雷波县| 翁牛特旗| 会理县| 民乐县| 河间市| 贵南县| 漾濞| 顺义区| 木里| 高安市| 张家港市| 阿尔山市| 韶山市| 望江县| 出国| 高清| 益阳市| 温州市| 南溪县| 武清区|