#分享 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
megapx
3.7 之後支援 run 的語法,稍微簡潔一點
megapx
最後給電腦沒有裝 3.7 的朋友一個好物,就是用 pyenv 切換 python 的 runtime 大家就自行服用拉:
Theory ref1:
在 Async multi-thread ref1:
Async ref1:
Async ref2:
愛心
森77
4
2
全部留言