協程
同步與異步
同步
在程式的執行中,每一個步驟是依著開始執行的順序執行
不可跳過,必須等待動作執行完才可以去下一個步驟
像是打電話時,需等待對方接起,期間不可做任何事
此為同步執行的概念
flowchart Call["打電話(非擴音)"] -->|響鈴中|等待接起 等待接起 --阻塞 --> 對方接起 對方接起 --> 講電話
異步
在程式的執行中,有時會遇到需要進行I/O操作的時候,這時如果還使用同步函式將會造成程式卡住
I/O操作是指Input和Output,是指程式與外界交流資料的動作,如API、讀取資料庫、讀取檔案等
通常這些動作需要時間,取決於外界怎麼回應,這時候如果使用同步就會卡住
所以這時候我們使用異步函式來進行特殊的操作
異步函式可以在函式卡住時先跳去其他函式執行,等原本的工作完成再跳回來
flowchart subgraph 打電話 Call["打電話(擴音)"] --響鈴中 -->等待接起 -.-> 講電話 end 等待接起 --非阻塞 -->滑IG 滑IG --等待對方接起 -->對方接起 對方接起 --> 講電話
語法
同步函式
1 | def make_call(): |
異步函式
在函式前方加上async
可以讓他轉變為協程,也就是可以被異步執行的函式await
代表運行至此處時會卡住,允許跳至其他地方
1 | import asyncio |
上課簡報
可能需等待字體與內容載入
可憐的高中生🤯 設計的 協程本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Discord 機器人教學!