#分享 Pycon TW 2019:Async contextmanager for Python 3.7

讚嘆上週公司出錢讓 data team 參加 Pycon,所以趁颱風假整理一下本次 conf 的收穫 傳送門:https://tw.pycon.org/2019/zh-hant/events/talk/867761633844265217/ 共筆:https://hackmd.io/@PyConTW/2019/%2F%40pycontw%2FSkVtrjnIS 投影片:https://gamekingga.com/pycontw2019.pdf?fbclid=IwAR12CkwK-UqGVlDfUexDuED5IH18grS3L2GqrFid07TLGWGNMSbDUIhIOEI 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
愛心
森77
4
2
全部留言
謝謝大大
不會 😂