asyncio 是 Python 標準庫中提供的異步編程框架,用於處理異步操作和並發任務。它在 Python 3.3 中引入。asyncio 提供了一個事件循環(event loop)來管理和調度協程(coroutines),從而實現非阻塞的程式設計。
協程(Coroutines):
協程是用 async def 定義的函數,返回一個協程對象。
使用 await 關鍵字來等待協程完成某個操作,並允許事件循環在等待期間處理其他任務。
import asyncio
async def say_hello():
print('Hello')
await asyncio.sleep(1) # 等待 1 秒
print('World')
asyncio.run(say_hello())
Hello
和 World
之間會等待一秒
事件循環是 asyncio 的核心,它負責管理和調度協程和任務。
使用 asyncio.run() 來運行協程,會自動創建一個事件循環,執行協程,並在完成後關閉循環。
async def main():
print('Start')
await asyncio.sleep(2)
print('End')
asyncio.run(main())
這個範例使用 main()
作為主協程。在異步程式設計中,通常會有一個主要的協程來組織和調度其他協程。Start
和 End
之間會等待兩秒
協程結構:
say_hello() 範例:只有單一協程,簡單直接。適合執行單個異步任務。
main() 範例:使用主協程來管理其他協程。更具組織性,適合多任務協作或併發執行。
事件循環:
say_hello() 範例:asyncio.run() 直接運行單一協程,事件循環簡單明確。
main() 範例:asyncio.run(main()) 將事件循環集中在主協程內,適合多任務管理。
擴展性:
say_hello() 範例:適用於簡單的異步操作,不太適合複雜的協程調度。
main() 範例:具備更大的靈活性,可以在 main() 裡組織和調度多個協程,適合複雜的異步程式。