要達成非同步(Asynchronous) I/O 有很多種策略,經常聽到的是使用多執行緒(multithreading)達到非同步。雖然 GIL(Global Interpreter Lock) 讓 Python multithreading 更適合 I/O 頻繁的應用(concurrency),但實際上頻繁的上下文切換(context-switch)卻消耗了更多時間。
另一種策略是基於協同程序(Coroutine)來實現非同步,在 single-thread 下允許程式來決定程式執行的順序,因此可以更有效的利用 CPU 處理時間。
本次簡短分享將會示範如何建立一個 Asynchronous I/O (non-blocking, callback, event-loop) 接著實做一個 Coroutine 來改寫原本 callback 方式。
https://www.meetup.com/Kaohsiung-Python-Meetup/events/251634923/