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

python  asyncio常規(guī)操作記錄

 更新時間:2026年03月21日 14:01:58   作者:mingshili  
本文介紹了Python asyncio的核心并發(fā)機制和API,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

Event Loop 執(zhí)行機制

Event loop 本質(zhì)是單線程內(nèi)的無限循環(huán)調(diào)度器,不斷從任務隊列取出就緒的任務執(zhí)行:

while True:
    events = poll_for_ready_events()   # 檢查就緒事件(IO完成、定時器到期、回調(diào)投遞)
    for event in events:
        execute(event.callback)        # 逐個執(zhí)行

協(xié)程遇到 await掛起自身、讓出控制權(quán)給 loop,loop 去執(zhí)行其他就緒任務;
等待的操作完成后,loop 恢復該協(xié)程繼續(xù)執(zhí)行。

一個線程最多運行一個 event loop。

三個核心 API 對比

1.asyncio.create_task(coro)

在當前 loop 內(nèi)并發(fā)調(diào)度一個協(xié)程,立即返回 asyncio.Task,不阻塞。

async def main():
    task1 = asyncio.create_task(fetch_a())   # 立即調(diào)度,不等完成
    task2 = asyncio.create_task(fetch_b())   # 兩個協(xié)程并發(fā)運行
    result_a = await task1                   # 需要結(jié)果時再 await
    result_b = await task2

適用場景: 同一個 loop 內(nèi)同時跑多個異步 IO 任務(并發(fā)請求、并發(fā)監(jiān)聽等)。

2.asyncio.to_thread(func, *args)

把同步阻塞函數(shù)丟到線程池執(zhí)行,當前協(xié)程掛起等待結(jié)果,但 event loop 不阻塞。

async def main():
    # time.sleep 是同步阻塞的,直接調(diào)用會卡死整個 loop
    await asyncio.to_thread(time.sleep, 5)   # 丟到線程池,loop 繼續(xù)處理別的
    # 典型場景:CPU 密集計算、沒有 async 版本的阻塞 IO 庫
    data = await asyncio.to_thread(read_big_file, path)

適用場景: 調(diào)用沒有 async 版本的阻塞函數(shù)(文件 IO、CPU 計算、舊的同步庫),
避免卡死 event loop。

await會卡住當前協(xié)程嗎?

當前協(xié)程會等待,但 event loop 和其他協(xié)程不受影響:

寫法當前協(xié)程event loop其他協(xié)程
time.sleep(5)全卡
await asyncio.to_thread(time.sleep, 5)不卡正常跑
await asyncio.sleep(5)不卡正常跑

3.asyncio.run_coroutine_threadsafe(coro, loop)

從另一個線程向指定 loop 投遞一個協(xié)程,返回 concurrent.futures.Future

# 在非 asyncio 的普通線程中:
future = asyncio.run_coroutine_threadsafe(play_audio(data), main_loop)
result = future.result(timeout=10)   # 阻塞等待結(jié)果(在當前線程阻塞,不影響 loop)

適用場景: 普通線程需要讓某個 event loop 執(zhí)行一個協(xié)程(跨線程投遞異步任務)。

相關(guān) API:call_soon_threadsafe

loop.call_soon_threadsafe(callback, *args)

run_coroutine_threadsafe 類似,但投遞的是普通回調(diào)函數(shù)而非協(xié)程。

# 從 WebSocket 線程把音頻流注冊到主線程的 Mixer
self._main_loop.call_soon_threadsafe(mixer.add_stream, stream)

總結(jié)對比表

API調(diào)用位置投遞目標方向返回值
create_task(coro)協(xié)程內(nèi)協(xié)程 → 同一個 loopasync → asyncasyncio.Task
to_thread(func)協(xié)程內(nèi)同步函數(shù) → 線程池async → sync → asyncawaitable
run_coroutine_threadsafe(coro, loop)任意線程協(xié)程 → 另一個線程的 loopsync → asyncconcurrent.futures.Future
call_soon_threadsafe(cb)任意線程回調(diào) → 另一個線程的 loopsync → sync(callback)None

速記口訣

create_task              → 同 loop 內(nèi)并發(fā)跑協(xié)程
to_thread                → 把同步阻塞的東西丟出去,別卡我的 loop
run_coroutine_threadsafe → 從外面往別人的 loop 里塞協(xié)程
call_soon_threadsafe     → 從外面往別人的 loop 里塞回調(diào)

項目中的實際應用

本項目 AudioReceiverServer 中存在兩個線程各自運行一個 event loop:

主線程 event loop                     WebSocket 線程 event loop
┌───────────────────┐                ┌───────────────────┐
│  Mixer 協(xié)程        │                │  ws.recv() 協(xié)程 A  │
│  其他音頻處理 ...   │  ?── call_soon │  ws.recv() 協(xié)程 B  │
│                   │   threadsafe   │  ws.recv() 協(xié)程 C  │
└───────────────────┘                └───────────────────┘
  • WebSocket 線程的 loop 同時 await 多個連接的 recv(),誰來數(shù)據(jù)就恢復誰
  • 需要操作主線程的 Mixer 時,通過 call_soon_threadsafe 把回調(diào)投遞到主線程 loop

到此這篇關(guān)于python asyncio常規(guī)操作記錄的文章就介紹到這了,更多相關(guān)python asyncio內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3利用scapy局域網(wǎng)實現(xiàn)自動多線程arp掃描功能

    Python3利用scapy局域網(wǎng)實現(xiàn)自動多線程arp掃描功能

    這篇文章主要介紹了Python3利用scapy局域網(wǎng)實現(xiàn)自動多線程arp掃描功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 使用Python實現(xiàn)在Windows下安裝Django

    使用Python實現(xiàn)在Windows下安裝Django

    今天小編就為大家分享一篇關(guān)于使用Python實現(xiàn)在Windows下安裝Django,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 使用Python設(shè)置Excel數(shù)據(jù)驗證規(guī)則

    使用Python設(shè)置Excel數(shù)據(jù)驗證規(guī)則

    在處理電子表格數(shù)據(jù)時,確保輸入數(shù)據(jù)的準確性和一致性至關(guān)重要,數(shù)據(jù)驗證功能允許開發(fā)者設(shè)置規(guī)則來限制用戶可以在單元格中輸入的內(nèi)容,從而防止錯誤數(shù)據(jù)的錄入,本文將介紹如何使用 Python 在 Excel 工作表中添加各種類型的數(shù)據(jù)驗證規(guī)則,需要的朋友可以參考下
    2026-05-05
  • vscode autopep8無法格式化python代碼問題解決

    vscode autopep8無法格式化python代碼問題解決

    這篇文章主要為大家介紹了vscode autopep8無法格式化python代碼問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • python連接mongodb操作數(shù)據(jù)示例(mongodb數(shù)據(jù)庫配置類)

    python連接mongodb操作數(shù)據(jù)示例(mongodb數(shù)據(jù)庫配置類)

    這篇文章主要介紹了python連接mongodb操作數(shù)據(jù)示例,主要包括插入數(shù)據(jù)、更新數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)等
    2013-12-12
  • ChatGLM-6B+LangChain環(huán)境部署與使用實戰(zhàn)

    ChatGLM-6B+LangChain環(huán)境部署與使用實戰(zhàn)

    這篇文章主要介紹了ChatGLM-6B+LangChain環(huán)境部署與使用方法,結(jié)合實例形式詳細分析了ChatGLM-6B+LangChain環(huán)境部署相關(guān)步驟、實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下
    2023-07-07
  • 深入詳解Python解析帶有命名空間XML的多種方法

    深入詳解Python解析帶有命名空間XML的多種方法

    XML命名空間是XML技術(shù)中??不可或缺??的重要組成部分,它通過提供元素和屬性的唯一標識,本文將深入探討Python中解析帶有命名空間的XML文檔的各種方法和技術(shù),希望對大家有所幫助
    2025-09-09
  • python-httpx的使用及說明

    python-httpx的使用及說明

    這篇文章主要介紹了python-httpx的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python 學習教程之networkx

    Python 學習教程之networkx

    networkx是Python的一個包,用于構(gòu)建和操作復雜的圖結(jié)構(gòu),提供分析圖的算法。對Python networkx相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • Python學習之字符串常用操作詳解

    Python學習之字符串常用操作詳解

    字符串是Pyhon中的常用的數(shù)據(jù)類型,這篇文章主要為大家詳細介紹一下python字符串的一些常用操作,文中示例代碼講解詳細,需要的朋友可以參考下
    2022-09-09

最新評論

和林格尔县| 玛纳斯县| 菏泽市| 汝阳县| 阆中市| 封开县| 温州市| 保定市| 凤庆县| 嘉兴市| 陇西县| 伊吾县| 防城港市| 洛阳市| 姜堰市| 阿克| 宣恩县| 沂南县| 张家口市| 南川市| 内丘县| 溧水县| 松阳县| 白玉县| 曲松县| 平顺县| 辉南县| 唐海县| 建平县| 金坛市| 河北省| 通河县| 唐山市| 和田县| 安仁县| 长丰县| 安福县| 平潭县| 延庆县| 林周县| 巫溪县|