同步與異步

同步

在程式的執行中,每一個步驟是依著開始執行的順序執行
不可跳過,必須等待動作執行完才可以去下一個步驟
像是打電話時,需等待對方接起,期間不可做任何事
此為同步執行的概念

異步

在程式的執行中,有時會遇到需要進行I/O操作的時候,這時如果還使用同步函式將會造成程式卡住
I/O操作是指Input和Output,是指程式與外界交流資料的動作,如API、讀取資料庫、讀取檔案等
通常這些動作需要時間,取決於外界怎麼回應,這時候如果使用同步就會卡住
所以這時候我們使用異步函式來進行特殊的操作
異步函式可以在函式卡住時先跳去其他函式執行,等原本的工作完成再跳回來

語法

同步函式

1
2
3
4
5
6
7
8
def make_call():
# 打電話

def ig():
# 滑IG

make_call() # 等對方接起然後講完電話才可以滑IG
ig()

異步函式

在函式前方加上async可以讓他轉變為協程,也就是可以被異步執行的函式
await 代表運行至此處時會卡住,允許跳至其他地方

1
2
3
4
5
6
7
8
9
10
11
12
13
import asyncio

async def make_call():
# 打電話

async def ig():
# 滑IG

# 下方實際用法看看就好,之後較少用到
async def main():
await asyncio.gather(steam(),fry()) # 可以在兩個動作間切換

asyncio.run(main()) # 開始執行這兩個動作的組合

上課簡報

可能需等待字體與內容載入

可憐的高中生🤯 設計的 協程