日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

协程、asyncio、异步编程

發布時間:2025/5/22 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 协程、asyncio、异步编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 協程
    • 2 異步編程
      • 3.1 事件循環
      • 3.2 async
      • 3.3 await
      • 3.4 Task對象

1 協程

協程不是由操作系統提供,由程序員人為提供(用戶態上下文切換技術)

協稱(Coroutine),也可以被稱為微線程,是一種用戶態內的上下文切換技術。簡而言之,其實就是通過一個線程實現代碼塊相互切換執行。

實現協程的幾種方法:

  • greenlet、早期模塊
  • yield關鍵字
  • asynco裝飾器(py3.4)
  • async、await關鍵字(py3.5)(推薦)

協程意義
在一個線程中,如果遇到IO等待時間,線程不會等,利用空閑的時間在去干其他事。

2 異步編程

3.1 事件循環

理解微一個死循環,去檢測并執行某些代碼

import asyncio# 生成或獲取一個事件循環 loop = asyncio.get_event_loop()# 將任務放到 任務列表 loop.run_until_complete(任務)

3.2 async

協程函數:定義函數的時候async def 函數名
協程對象:執行協程函數()得到協程對象

# 協程對象 async def func():pass # 內容不執行# 協程對象 result = func()

注意:執行協程函數創建愛協程對象,函數內部代碼不會執行

事件循環處理函數內部代碼

import asyncio# 協程對象 async def func():pass # 內容不執行# 協程對象 result = func()# 添加事件,幫助執行函數內部代碼 py3.4 #loop = asyncio.get_event_loop() #loop.run_until_complete(result)# py3.7 asycio.run(result)

3.3 await

await + 可等待對象(協程對象、Future、Task)

await就是等待對象的值得到結果之后在繼續往下走

案例一:

import asyncioasync def func():print("666")# 這里等待2秒,有其他任務執行其他任務,然后繼續向后執行res = await asyncio.sleep(2)print("結束", res)asyncio.run(func())

案例二:

import asyncioasync def others():print("start")await asyncio.sleep(2)print("end")return "返回值"async def func():print("執行協程函數內部代碼")# 遇到IO操作掛起當前協程(任務),等IO操作完成之后再繼續往下執行。# 當前協程掛起時,事件循環可以去執行其他協程(任務)res = await others()print("IO請求結束,結果為:", res)asyncio.run(func())

案例三

import asyncioasync def others():print("start")await asyncio.sleep(2)print("end")return "返回值"async def func():print("執行協程函數內部代碼")# 遇到IO操作掛起當前協程(任務),等IO操作完成之后再繼續往下執行。# 當前協程掛起時,事件循環可以去執行其他協程(任務)res1 = await others()print("IO請求結束,結果為:", res1)res2 = await others()print("IO請求結束,結果為:", res2)asyncio.run(func())

3.4 Task對象

  • py3.7

  • 在事件循環中添加多個任務

  • Task用于并發調度協程,通過asyncio.create_task(協程對象)的方式創建愛你Task對象,這樣可以讓協程加入事件循環中等待被調度執行。除了使用asyncio.create_task()函數以外,還可以用更低層級的loop_create_task()或ensure_future()函數。不建議手動實例化Task對象。

參考地址:
https://www.bilibili.com/video/BV1dD4y127bD

總結

以上是生活随笔為你收集整理的协程、asyncio、异步编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。