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

Python 中的異步與同步深度解析(實(shí)踐記錄)

 更新時(shí)間:2025年03月28日 16:22:36   作者:子墨將  
在Python編程世界里,異步和同步的概念是理解程序執(zhí)行流程和性能優(yōu)化的關(guān)鍵,這篇文章將帶你深入了解它們的差異,以及阻塞和非阻塞的特性,同時(shí)通過(guò)實(shí)際代碼示例來(lái)加深理解,感興趣的朋友一起看看吧

Python中的異步與同步:深度解析與實(shí)踐

在Python編程世界里,異步和同步的概念是理解程序執(zhí)行流程和性能優(yōu)化的關(guān)鍵。這篇文章將帶你深入了解它們的差異,以及阻塞和非阻塞的特性,同時(shí)通過(guò)實(shí)際代碼示例來(lái)加深理解。

異步與同步的定義

異步

異步意味著多任務(wù)處理,任務(wù)之間的執(zhí)行沒(méi)有嚴(yán)格的先后順序,甚至可以同時(shí)運(yùn)行。這就好比你一邊聽(tīng)音樂(lè),一邊瀏覽網(wǎng)頁(yè),聽(tīng)音樂(lè)和瀏覽網(wǎng)頁(yè)這兩個(gè)任務(wù)之間互不干擾,多條任務(wù)的執(zhí)行路徑同時(shí)存在,程序有多個(gè)“主線”并行處理任務(wù)。

同步

同步同樣是處理多任務(wù),但任務(wù)之間有嚴(yán)格的先后順序。只有前一個(gè)任務(wù)執(zhí)行完成,下一個(gè)任務(wù)才能開(kāi)始。這類似于你排隊(duì)買東西,必須一個(gè)人買完,下一個(gè)人才能接著買,整個(gè)過(guò)程只有一條“主線”。

阻塞與非阻塞的概念

阻塞

從調(diào)用者的角度來(lái)看,如果在調(diào)用某個(gè)操作時(shí),程序被卡住,無(wú)法繼續(xù)向下執(zhí)行,必須等待該操作完成,這種情況就是阻塞。比如你打電話叫外賣,在等待外賣送達(dá)的這段時(shí)間里,你什么其他事都做不了,只能干等著,這就是“阻塞”狀態(tài)。

非阻塞

當(dāng)調(diào)用某個(gè)操作時(shí),程序不會(huì)被卡住,能夠繼續(xù)向下執(zhí)行,無(wú)需等待該操作完成,這就是非阻塞。還是以叫外賣為例,你下單后可以繼續(xù)做自己的事情,不用一直等著外賣,這就是“非阻塞”狀態(tài)。

同步阻塞與異步非阻塞示例

下面通過(guò)Python代碼來(lái)具體展示異步和同步的工作方式。這里我們使用multiprocessing模塊中的Pool來(lái)創(chuàng)建進(jìn)程池,實(shí)現(xiàn)多任務(wù)處理。

from multiprocessing import Pool
import time
import os
def water():
    """燒水"""
    print(f"子進(jìn)程 pid={os.getpid()}")
    for i in range(5):
        print("正在燒水中")
        time.sleep(0.5)
    return "水燒開(kāi)了"
def handle_water(message):
    """接收燒開(kāi)水的信息"""
    print(f"進(jìn)程pid={os.getpid()} 收到了異步任務(wù)的結(jié)束信息: {message}")
pool = Pool(3)
print(f"主進(jìn)程 pid={os.getpid()}")
for i in range(3):
    print("打游戲")
    time.sleep(0.5)
# 回調(diào)
pool.apply_async(water, callback=handle_water)  # 異步添加任務(wù)
for i in range(20):
    print("打游戲")
    time.sleep(0.5)
pool.close()
pool.join()

在這段代碼中:

  • 首先創(chuàng)建了一個(gè)進(jìn)程池Pool,最大進(jìn)程數(shù)為3。
  • 主進(jìn)程先執(zhí)行一段“打游戲”的操作,循環(huán)3次,每次間隔0.5秒。
  • 然后使用pool.apply_async方法異步地添加water任務(wù)到進(jìn)程池,并設(shè)置了回調(diào)函數(shù)handle_water。water任務(wù)模擬燒水過(guò)程,會(huì)打印當(dāng)前子進(jìn)程ID并每隔0.5秒輸出“正在燒水中”,完成后返回“水燒開(kāi)了”。handle_water函數(shù)用于接收water任務(wù)完成后的信息并打印。
  • 接著主進(jìn)程繼續(xù)執(zhí)行“打游戲”操作,循環(huán)20次,每次間隔0.5秒。這期間,water任務(wù)在后臺(tái)異步執(zhí)行。
  • 最后,調(diào)用pool.close()關(guān)閉進(jìn)程池,不再接受新任務(wù),pool.join()讓主進(jìn)程等待所有子進(jìn)程完成任務(wù)后再結(jié)束。

通過(guò)這個(gè)示例,可以清晰地看到異步任務(wù)在后臺(tái)執(zhí)行,不會(huì)阻塞主進(jìn)程的其他操作,體現(xiàn)了異步非阻塞的特性。如果將pool.apply_async換成pool.apply,那么就是同步阻塞的效果,water任務(wù)執(zhí)行時(shí)會(huì)阻塞主進(jìn)程,直到任務(wù)完成才會(huì)繼續(xù)執(zhí)行后續(xù)代碼。

理解異步、同步、阻塞和非阻塞的概念,能幫助開(kāi)發(fā)者根據(jù)實(shí)際需求優(yōu)化程序性能,合理利用系統(tǒng)資源,讓程序運(yùn)行得更加高效和靈活。無(wú)論是處理I/O密集型任務(wù),還是CPU密集型任務(wù),選擇合適的執(zhí)行方式都是關(guān)鍵。

到此這篇關(guān)于Python 中的異步與同步:解析與實(shí)踐的文章就介紹到這了,更多相關(guān)Python 異步與同步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Django框架利用Ajax實(shí)現(xiàn)點(diǎn)贊功能實(shí)例代碼

    基于Django框架利用Ajax實(shí)現(xiàn)點(diǎn)贊功能實(shí)例代碼

    點(diǎn)贊這個(gè)功能是我們現(xiàn)在經(jīng)常會(huì)遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于基于Django框架利用Ajax實(shí)現(xiàn)點(diǎn)贊功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Python使用imagehash庫(kù)生成ahash算法的示例代碼

    Python使用imagehash庫(kù)生成ahash算法的示例代碼

    aHash、pHash、dHash是常用的圖像相似度識(shí)別算法,本文將利用Python中的imagehash庫(kù)生成這一算法,從而實(shí)現(xiàn)計(jì)算圖片相似度,感興趣的可以了解一下
    2022-11-11
  • Python 虛擬環(huán)境完全指南:venv、virtualenv 與 Conda詳解

    Python 虛擬環(huán)境完全指南:venv、virtualenv 與 Conda詳解

    文章詳細(xì)介紹了Python的虛擬環(huán)境及其管理工具,文章還提供了創(chuàng)建、激活、導(dǎo)出、刪除環(huán)境等操作指導(dǎo),以及最佳實(shí)踐和參考命令,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • python基礎(chǔ)教程之csv格式文件的寫(xiě)入與讀取

    python基礎(chǔ)教程之csv格式文件的寫(xiě)入與讀取

    逗號(hào)分隔值(Comma-Separated Values,CSV,也稱為字符分隔值,分隔字符也可以不是逗號(hào)),新這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)教程之csv格式文件的寫(xiě)入與讀取的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python使用pyecharts繪制簡(jiǎn)單的折線圖

    python使用pyecharts繪制簡(jiǎn)單的折線圖

    這篇文章講給大家介紹一下python使用pyecharts繪制簡(jiǎn)單的折線圖的黨法步驟,文中有詳細(xì)的代碼示例講解,對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • python 文件下載之?dāng)帱c(diǎn)續(xù)傳的實(shí)現(xiàn)

    python 文件下載之?dāng)帱c(diǎn)續(xù)傳的實(shí)現(xiàn)

    用python進(jìn)行文件下載的時(shí)候,一旦出現(xiàn)網(wǎng)絡(luò)波動(dòng)問(wèn)題,導(dǎo)致文件下載到一半。如果將下載不完全的文件刪掉,那么又需要從頭開(kāi)始,如果連續(xù)網(wǎng)絡(luò)波動(dòng),是不是要頭禿了。本文提供斷點(diǎn)續(xù)傳下載工具方法,希望可以幫助到你
    2021-11-11
  • 淺談python標(biāo)準(zhǔn)庫(kù)--functools.partial

    淺談python標(biāo)準(zhǔn)庫(kù)--functools.partial

    這篇文章主要介紹了python標(biāo)準(zhǔn)庫(kù)--functools.partial,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python純代碼通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合方式

    Python純代碼通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合方式

    這篇文章主要介紹了Python純代碼通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 如何使用Python提取Chrome瀏覽器保存的密碼

    如何使用Python提取Chrome瀏覽器保存的密碼

    今天小編教大家怎么用Python提取Chrome瀏覽器保存的密碼,在這需要導(dǎo)入一些必要模塊定義一些有用的函數(shù)來(lái)幫助我們?cè)谥骱瘮?shù)中調(diào)用,具體實(shí)例代碼跟隨小編一起學(xué)習(xí)下吧
    2021-06-06
  • 解析python 中/ 和 % 和 //(地板除)

    解析python 中/ 和 % 和 //(地板除)

    這篇文章主要介紹了python 中/ 和 % 和 //(地板除)的區(qū)別及簡(jiǎn)介,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-06-06

最新評(píng)論

全州县| 紫云| 饶阳县| 梅河口市| 萨迦县| 瓦房店市| 甘南县| 镇巴县| 津南区| 印江| 兰西县| 巧家县| 安吉县| 白银市| 宁安市| 庆阳市| 双桥区| 龙江县| 雷州市| 威远县| 和政县| 开封县| 荃湾区| 长宁县| 灌云县| 奇台县| 庄浪县| 广平县| 治多县| 钟山县| 抚州市| 滁州市| 汾阳市| 马关县| 仁化县| 巴林左旗| 葵青区| 石首市| 乐平市| 来凤县| 黑河市|