一些Pre關鍵概念
asyncio 本質上還是單進程單線程的Python程序;
建立event_loop 概念,上面event_loop 可以理解為大腦,下面是若干個可執行的Task;
Task 沒有控制權,沒有辦法控制event_loop 執行某個Task,只能說明目前在等待哪個Task執行完畢或已準備好執行,由event_loop 控制由哪個Task執行;
Event_loop 一旦開始運行Task,必須由Task顯式地交出控制權,把控制權交還給EventLoop,具體做法有:await 和 函數執行完畢;
區分Coroutine 和 Task,Coroutine 只有變成 Task 才能夠運行;
拿到Coroutine的返回值需要await = xx 操作
盡管協程是并發的,但同一時刻僅一個程序再跑,優勢在于等待時間會被充分利用;
Coroutine 與 Task
Coroutine 有分為 Coroutine Function 和 Coroutine Obj 。 Coroutine Function 是由 asyncio定義,調用Coroutine Function得到的返回值是Coroutine Obj,
import asyncioasync def main():print('hello')await asyncio.sleep(1)print('world')coro = main()
其中main函數(Coroutine Function)并不會運行,僅返回一個coroutine obj
那如何使得這個程序運行?
- 從 synchronize 模式 切換到 asynchronize 模式, 切換到Event_loop控制任務執行
- 把coroutine obj 轉換為 Task
使用 asyncio.run 實現