#分享 Pycon TW 2019:Async contextmanager for Python 3.7
讚嘆上週公司出錢讓 data team 參加 Pycon,所以趁颱風假整理一下本次 conf 的收穫
傳送門:共筆:投影片:
Python 從 3.5 開始就有 async, await 的語法,但我那個時候一直沒去搞懂 async 跟 multi-thread, multi-process 有什麼差,所以就懶得學。今天就先講一下 async 這 multi 家族差在哪XD
不囉唆先上圖:async 就是遇到 IO 的時候會跳去做別的事情,不會讓 CPU 閒下來,最好的應用就是 JavaScript,因為網頁常常要打一堆 api,這些都是 io bound 的工作,所以 JavaScript 預設就是用 async 來時間(希望我沒講錯,講錯拜託大大們糾正)。那你可能會有個疑問,我上 OS 的時候學過 multi-thread 了誒,幹嘛再學個 async 啊?好處在哪?
幫大家複習一下 multi-thread: thread 跟 process 的差別是 thread 會共用 code, data 跟 files
但是 register, counter 跟 stack 要一人一份,這樣 cpu 跳掉要再回去的時候才知道要從哪裡開始執行(忘記的要回去複習一下組語,我說我XD)
那 async 跟 thread 的差別是他是 single thread,所以比起 multi-thread 不需要花額外的記憶體去存 register, counter 跟 stack
async 就介紹到這邊拉,下面講一下在 Python 要怎麼使用 async。
function 前面要加 async, 需要等 io 的地方請加上 await。
以下是舊版的寫法:使用 get_event_loop
3.7 之後支援 run 的語法,稍微簡潔一點
最後給電腦沒有裝 3.7 的朋友一個好物,就是用 pyenv 切換 python 的 runtime
大家就自行服用拉:
Theory ref1: 在 Async
multi-thread ref1: Async ref1: Async ref2:



