用 asyncio 建構一個多並行程式,例如搭配 aiohttp 撰寫網路爬蟲來提高效率是多數人最常使用 asyncio 的部分。但假使今天切換到硬體情境,想開發一支可以針對多個不同的 serail port 裝置讀與寫的程式,如何在裝置阻塞時切換?以及如何使用 asyncio 讓硬體溝通也能多並行?
這場演講將分享作者使用 asyncio 強大的 low-level APIs (Transport 和 Protocol) 來建構非同步框架與函式庫,並利用它來開發應用程式,讓多個使用 serial port 硬體能夠並行的溝通。
接著就讓我們一起優雅的用 asyncio 建立一個非同步框架吧!
過去看到 [asyncio](https://docs.python.org/3.6/library/asyncio.html) 的官方文件複雜到令人~~豆頁疼~~ (不過 [3.7](https://docs.python.org/3.7/library/asyncio.html) 之後的官方文件有做階層分類,比較好理解),除了開發應用的範例,裡面還有數不盡讀到讓人懷疑人生的 APIs(哎呀,知識太淺薄了)。不能責怪它的複雜,原因是 asyncio 的遠大夢想**不僅僅只是作為一個應用函式庫還希望提供給框架與函式庫開發者使用**。但如果您僅想使用 asyncio 作為應用,那就真的只需要掌握一小部分高階 api 就足夠了。
因此本次分享希望著重在:
+ 如何使用 asyncio 開發非同步的函式庫,
+ 並且建構一個 serial 的非同步函式庫(達到能開發出一個 **Python async serial port for Humans**),
+ 並使用這個函示庫開發一個並行的應用。